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

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

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

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

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,用于验证我们是否能看到其原来的代码。

上一下最简单的代码吧

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");

}

}

});

}

}

看一下效果

点击前:

image.png

点击后:

image.png

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

第三步:反编译apk

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

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

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

2、然后进行解压

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

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文件

image.png

然后用JD-GUI将它打开。

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

image.png

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

第四步:用apktoos修改源代码

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

image.png

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

2、执行命令

sh apktool.sh apktool d APK名字.apk

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

image.png

我们点进去,找到smali目录

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

![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判断语句全局搜索

我们找到了这一行

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

我们生成如下:

image.png

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

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

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

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

第五步:运行盗版apk

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

点击前:

image.png

点击后:

image.png

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

注:

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

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

3、切勿用于非法用途。

国外android逆向的论坛,初探android逆向相关推荐

  1. 【Android 逆向】APK 文件格式 ( Android 应用安装 | Zip 文件格式 | 使用 Python 代码提取 APK 文件 )

    文章目录 一.Android 应用安装 二.APK 文件格式 三.使用 Python 提取 APK 文件 一.Android 应用安装 APK 是 Android 应用的安装文件 , 现在也有 AAB ...

  2. 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

    文章目录 一.Android 逆向中使用的 android.permission 权限 二.Android 系统中的 Linux 用户权限 一.Android 逆向中使用的 android.permi ...

  3. android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】

    说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便地知道被传入的参数和返回值呢? ...

  4. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  5. Android逆向(一)Android逆向工具(一)

    最近一周时间,在学习和研究Android逆向,接下来一段时间,写一系列Android逆向的博客,来总结和记录自己所掌握的知识,也希望为正在学习Android逆向的朋友带来一点帮助. 首先,简单说一下自 ...

  6. 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

    文章目录 前言 一.Android 端可执行程序的 main 函数操作 二.Android 端 TCP 协议服务器建立 三.Android 端接收 PC 端传来的数据 四.博客资源 前言 本篇博客重点 ...

  7. c语言将十进制转化为二进制算法_base64算法初探即逆向分析

    算法分析 虽说base64严格意义上来说并不能算是加密算法,但的确应用方面来说还算是比较广,在CTF的算法逆向中Base系列算是也比较常见的,萌新刚开始学算法,就以base64为例,对该算法进行一个简 ...

  8. 看雪论坛 『Android安全』版优秀和精华帖分类索引

    逆向技术基础 < 对某APK的一次分析 > JayL的这篇分析中介绍的工具对初学者依然值得参考. < android一个crackme分析和破解 > zhaokang的Crac ...

  9. Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛

    Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛 主题:Android Gesture 手势识别使用实例 精华帖 (0) :: 良好帖 (0) ...

  10. Android Flutter 内存机制初探

    阿里妹导读:闲鱼技术团队一直在探索如何使用Flutter来统一移动App开发.移动设备上的资源有限,内存使用成了日常开发中的常见问题.那么,Flutter是如何使用内存,又会对Native App的内 ...

最新文章

  1. 双指针问题最简单的教程(1)
  2. 科学家开发出新型生物质基碳材料负载催化剂制备方法
  3. Kruskal HDOJ 1233 还是畅通工程
  4. UA MATH567 高维统计I 概率不等式8 亚指数范数
  5. python mac 安装pillow,关于python:安装了Pillow,但仍然得到“ImportError:没有名为PIL的模块”...
  6. 分析递归函数的时间复杂度
  7. linux 编写脚本示范,Linux-scripts-简单脚本和脚本的执行
  8. java自定义方法参数注解_Java方法中的参数太多,第1部分:自定义类型
  9. 创立三年,广受好评:如何评价 ApacheCN ?
  10. 什么是AJAX (转贴)
  11. Python 深入浅出 - HelloWorld
  12. hping3使用详解
  13. TCP BBR - 一键安装最新内核并开启 TCP BBR
  14. Android Studio 开发实践——简易版音游APP(一)
  15. 实习日记 08/23 day33 理解JVM---Java核心卷中的并发
  16. 技术负责人 vs产品负责人_产品前的人
  17. 大厂必考深度学习面试题及参考答案
  18. pdf文档翻译软件有哪些?Pdf文档翻译软件分享。
  19. 什么是LSI关键词?
  20. 软件工程--沃尔沃物流信息系统tp5实现源码

热门文章

  1. office精英俱乐部_开放组织读书俱乐部:收回精英制
  2. OceanBase数据库大赛
  3. APP支持请回复相关主题帖或邮件至 developer.haipeng.zhao@gmail.com
  4. ug中文字大小设置_ug10.0工具条字体大小如何修改?
  5. 服务器虚拟化后有几个io地址,CPU虚拟化,内存虚拟化和IO虚拟化
  6. 共模信号和差模信号的区别和抑制
  7. drupal mysql hash密码_Drupal7管理员密码重置
  8. goolgle版本87.0乱码设置utf-8,附有charset插件
  9. 《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述
  10. 温暖和暖和的区别Java_国内冬天哪里比较暖和 冬天暖和的城市排名