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

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

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

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

对于“安卓开发没人要了”这种话,我也很无奈,最近的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、切勿用于非法用途。

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • idea datagrid 激活码【在线破解激活】

    idea datagrid 激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
  • js什么是匿名函数_js函数返回值

    js什么是匿名函数_js函数返回值js匿名函数的代码如下:(function(){ // 这里忽略jQuery 所有实现 })();半年前初次接触jQuery 的时候,我也像其他人一样很兴奋地想看看源码是什么样的。然而,在看到源码的第一眼,我就迷糊了。为什么只有一个匿名函数又没看到运行(当然是运行了…… ),就能有jQuery 这么个函数库了?于是,我抱着疑问来到CSDN 。结果相信现在很多人都很清楚了(因为在

    2022年9月27日
  • 初级算法学习步骤

    初级算法学习步骤前言零散整理一个多月终于整理完了。。。。这是一篇初级算法学习的步骤总结,或许可以帮助你怎么去接触算法阅读本文需要一定java语法基础和api文档查看基础,但算法其实看重的是思想而不是语言,所以都可以借鉴。本人大二,参加过蓝桥杯。一直没时间吧之前的总结整理出来,现在准备整理一下用java做算法的一些东西……学习了两个月左右算法,从啥都不会到小白再到算是初级……做一个总结,请高手多多指…

    2022年6月19日
  • JAVA遍历数组的三种方法_如何遍历一个数组

    JAVA遍历数组的三种方法_如何遍历一个数组我们也了解Java也已经很久了,那今天小编想问大家是否知道java遍历数组的方式有哪些?是不是内心已经已经有答案了?让就跟着小编的步伐一起看看吧。1.for循环遍历这是最基本的遍历方式通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。2.Arrays的toString方法debug快速查看方法利用Array…

    2022年9月19日
  • hadoop 面试题收集及个人答案整理

    hadoop 面试题收集及个人答案整理1、简要描述如何安装配置一个apache开源版hadoop,描述即可,列出步骤更好      –解压hadoop包,到指定安装文件夹      –配置linux基本网络环境、jdk环境、防火墙环境      –修改主机名,方便后面UI的访问      –修改hadoop/etc/hadoop/conf下的配置文件,根据部署的模式和需要进行配置      –格式化nam…

    2022年6月29日
  • Spark Streaming Join「建议收藏」

    Spark Streaming Join「建议收藏」多数据源Join思路多数据源Join大致有以下三种思路:数据源端Join,如Android/IOS客户端在上报用户行为数据时就获取并带上用户基础信息。计算引擎上Join,如用SparkStreaming、Flink做Join。结果端Join,如用HBase/ES做Join,Join键做Rowkey/_id,各字段分别写入列簇、列或field。三种思路各有优劣,使用时注意…

    2022年6月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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