国外android逆向的论坛,初探android逆向

国外android逆向的论坛,初探android逆向好久没有更新博客了。一直在想要更新点什么样子的干货。最近看了一点有关于逆向的文章,感觉还不错。对于“安卓开发没人要了”这种话,我也很无奈,最近的RN,包括kotlin的出现,还有Flutter框架的出现。这些东西的出现感觉都像是意味着,往后的移动端开发不需要双倍的人员了。最近突然对逆向萌生了一点点兴趣,关于逆向的东西依旧有很多,很多apk对进行加固,加壳等等,这里的入门仅仅是对于没有加密等操作的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

好久没有更新博客了。一直在想要更新点什么样子的干货。

最近看了一点有关于逆向的文章,感觉还不错。

对于“安卓开发没人要了”这种话,我也很无奈,最近的RN,包括kotlin的出现,还有Flutter框架的出现。 这些东西的出现感觉都像是意味着,往后的移动端开发不需要双倍的人员了。

最近突然对逆向萌生了一点点兴趣,关于逆向的东西依旧有很多,很多apk对进行加固,加壳等等,这里的入门仅仅是对于没有加密等操作的apk进行逆向,对初学者可以更快的知道流程,更快的入门。

70f61f16a08e

image.png

第一步:准备工具

1、下载android开发工具 android studio,百度即可。 建议去中文网或者官网下载

3、JD-GUI: 这个工具用于将jar文件转换成java代码 下载地址:http://jd.benow.ca/

4、APKTool: 本文重要工具,APK逆向工具,用于修改apk中的源代码 下载地址: http://ibotpeaches.github.io/Apktool/install/

第二步:准备apk

1、这里我们自己写一个测试的app,用于验证我们是否能看到其原来的代码。

上一下最简单的代码吧

70f61f16a08e

image.png

然后是java代码

public class MainActivity extends AppCompatActivity {

TextView textView;

Button button;

int var0 = 1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView = findViewById(R.id.main_tv);

button = findViewById(R.id.main_btn);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (var0 == 1) {

textView.setText(“我是被修改过的文字”);

} else {

textView.setText(“这个时候var0不等于1”);

}

}

});

}

}

看一下效果

点击前:

70f61f16a08e

image.png

点击后:

70f61f16a08e

image.png

然后,我们假设,这个app已经打包成了apk。(接下来,我们打包成apk)

第三步:反编译apk

我们知道,其实说白了,一个apk就是一个压缩包,只是他将很多东西进行了加密,转成了另一种格式。dex文件,交给底层去识别。

我们这一部分的工作就是要解密,然后要看到代码逻辑。

1、首先,我们将打包好的.apk文件改成.zip

2、然后进行解压

3、将我们解压后的文件里的 classes.dex文件放到 dex2jar中

70f61f16a08e

image.png

4、然后执行命令

sh d2j-dex2jar.sh classes.dex

(这里有可能会出现权限问题)

d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied

解决方案如下:

sudo chmod +x d2j_invoke.sh

密码要求是开机密码即可(mac)

5、在同一个目录下生成了一个jar文件

70f61f16a08e

image.png

然后用JD-GUI将它打开。

6、查看源代码,了解逻辑

70f61f16a08e

image.png

我们看到,源代码几乎是一丝不挂的展现到了我们眼前。

第四步:用apktoos修改源代码

1、我们将apk放到下载好的apktool的文件目录中,如图

70f61f16a08e

image.png

我们下载好之后会有两个文件,apktool.sh 和 apktool.jar,然后加上我们的apk现在一共有三个

2、执行命令

sh apktool.sh apktool d APK名字.apk

3、然后我们发现多了一个文件夹:

70f61f16a08e

image.png

我们点进去,找到smali目录

4、然后根据应用的包名找到相关目录

70f61f16a08e

![image.png](https://upload-images.jianshu.io/upload_images/5981775-2e4fba94ae587f09.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5、找到相关的Activity的java文件,我们的app只有一个页面,我们知道是MainActivity,所以我们要打开 MainActivity$1.smali

6、并且根据我们的if判断语句全局搜索

我们找到了这一行

70f61f16a08e

image.png

这里稍微普及一下有关samli的语句:

条件关键字 意思

if-eq 如果等于

if-ne 如果不等于

if-lt 如果小于

if-le 如果小于等于

if-gt 如果大于

if-ge 如果大于等于

if-eqz 如果等于零

if-nez 如果不等于0

if-ltz 如果小于零

if-lez 如果小于等于零

if-gtz 如果大于零

if-gez 如果大于等于零

这里原本是ne,我修改成了eq。这句话的大概意思就是 如果这个变量不等于我的变量p1,就返回一个东西。

我们根据java语句的字面意思,将其修改为等于。

7、修改完成后记得要保存哦

8、重新打包,命令:

sh apktool.sh b 刚才生成文件夹的名字 -o 新的apk的名字.apk

我们生成如下:

70f61f16a08e

image.png

9、我们有了新的apk,但是去安装发现会出错。原因是我们需要重新签名。

对于签名文件,我们用AS生成一个即可。然后放到同一目录,执行以下命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

10、最后得到apk,然后我们去运行

第五步:运行盗版apk

我们换用一个模拟器,来对比其前后的执行流程。

点击前:

70f61f16a08e

image.png

点击后:

70f61f16a08e

image.png

那么基本上就大功告成了。这个过程还是很繁琐的。

注:

1、这个仅仅是一个入门的简单教程,可能百度上已经烂大街了,但是入门确实很好。

2、很多市面上的apk都会进行加固|加壳。这一部分水很深,需要很多实战经验才能得出,这里我也在学习。

3、切勿用于非法用途。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234439.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 字符串类型的时间和时间类型的相互转换

    字符串类型的时间和时间类型的相互转换publicstaticDategetDate(StringsDate)throwsException{Datedate=newDate(); SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");  //要转换的格式SimpleDateFormatsdf2=newSimpleDateFormat("yyy…

  • django drf_django 消息队列

    django drf_django 消息队列前言我们上篇文章使用到了Serializer类,可能有小伙伴说太过复杂,那么本篇就为大家带来更加简便的序列化类ModelSerializerModelSerializer先来看下ModelSer

  • 数据库中select 查询详解[通俗易懂]

    数据库中select 查询详解[通俗易懂]数据查询操作介绍在数据库操作中,使用频率最多的是查询操作。查询数据时,根据不同的需求,条件对数据库中的数据进行查询,并返回结果单表查询数据查询数据库使用 select 命令。这个命令相对比较复杂。可变化样式较多,这里分功能依次讲解。 查询数据表中所有数据语法:select*from表名 select*fromt_student; …

  • 智能避障小车_基于单片机的智能玩具车系统设计

    智能避障小车_基于单片机的智能玩具车系统设计【1】背景意义近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术。因此,基于嵌入式技术的无线通信视频监控轮式机器人应运而生。由于它们与人类工作相比具有成本低廉、安全稳定的优点,目前已经在许多危险作业以及工业场合得到了广泛应用而且轮式机器人不需要像人那样采取过多的保护措施,因此轮式机…

    2022年10月18日
  • 详解springBoot集成activiti7,工作流实战案例(三)

    详解springBoot集成activiti7,工作流实战案例(三)快速使用IDEA搭建SpringBoot项目,集成Activiti7(一)详解springBoot集成activiti7,使用actiBPM绘制流程图(二)过程分析:部署流程 启动一个流程实例 查询当前流程中等待执行的任务 处理任务 流程结束用到activiti的service(ps:记得注入):RepositoryService RuntimeService…

    2022年10月19日
  • Ext.apply的用法[通俗易懂]

    Ext.apply的用法[通俗易懂]Ext核心API–Ext.apply与Ext.applyIf<scripttype="text/javascript"></script><scripttype="text/javascript"></script>Ext中apply及applyIf方法的应用        apply及applyI…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号