反编译从零到一

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布

一、介绍

反编译与防反编译的0到1系列第一篇。该篇目的是让读者了解反编译的基本过程,可以完全没有基础,也不用了解smali语法。文章里面demo提供所有 需要使用的apk以及相应的修改代码。只需傻瓜式的模仿就能够学会。

反编译与防反编译的0到1系列主要用于增加反编译技术栈,避免一些低级的错误让软件被有心者破解。因此后续还会有smali语法的介绍和smali的修改。 在.so文件中添加签名验证。

项目地址

二、工具

1、工具说明:工具存放在tools文件夹下,这里仅提供Mac版,其他版本可以根据网址下载
1.1、ApkTool
1.1.1、下载地址:https://ibotpeaches.github.io/Apktool/
1.1.2、集成:appt、apktool、apktool.jar,这三个文件拷贝到/usr/local/bin,升级的时候只需替换jar包
1.1.3、功能:
1.1.3.1、获取apk资源文件、AndroidManifest.xml文件、smali文件 apktool d xxx/xxx/crack.apk(生成文件在命令当前位置)
1.1.3.2、 重新打包 apktool b xxx/xxx/crack -o new_crack.apk
1.1.4、可能存在问题:

Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66)
at brut.androlib.Androlib.getResTable(Androlib.java:50)
at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77) 
 解决方案:https://ibotpeaches.github.io/Apktool/ 下载最新jar包替换即可。

1.2、DexToJar
1.2.1、下载地址:https://sourceforge.net/projects/dex2jar/
1.2.2、功能:dex转jar
1.2.3、使用 mac: 将d2j-dex2jar.sh 托人命令行 将反编译apk拖入命令行

   /Users/xxx/Desktop/xxx/xxx/d2j-dex2jar.sh /Users/xxx/Desktop/xxx/crack.apk

1.3、JD-GUId
1.3.1、下载地址:http://jd.benow.ca/
1.3.2、功能: 读取jar文件
1.4、界面工具
1.4.1、下载地址:https://github.com/Jermic/Android-Crack-Tool

2、反编译思路
2.1、dexToJar 获取jar包
2.2、使用JD-GUI分析代码,定位位置
2.3、修改变量的值,或方法返回后重置返回值
2.4、重新打包,签名,安装

3、如何加大破解难度
3.1、加固
3.2、混淆
3.3、尽量别在代码中直接写中文,这样相当于完全暴露意图,尽量放在String.xml文件中。
3.4、在.so文件中验证签名

三、第一个demo:

1、功能:修改打印工具类,实现输出打印日志
2、影响:日志完全暴露。
3、建议:敏感性的日志尽量使用完就删除,一旦工具类被修改,日志也会完全暴露
4、具体复现
4.1、使用该demo



这里简单的写了一个日志工具类,很可能和大家使用的不一样,但大多数日志都有一个开关逻辑。用这个开关去控制所有日志是否打印。
4.2、使用DexToJar 获取jar包(参照工具中获取jar的方法),然后分析



这里的中文可以说为定位文件起来不小作用,我们只用去找a类中的a方法
4.3、使用ApkTool反编译apk(参照工具中的方法),然后修改


Log.d 能很轻松的定位修改位置。
if-eqz v0, :cond_0 #这句话的含义如果v0==0执行cond_0分支,执行cond_0分支就方法就结束了所以把v0值修改即可


“#“ 代表注释返回值赋值给v0 注释掉,重新给v0赋值
4.4、重新打包(参考工具)
4.5、签名(签名工具在assets中,key也准备好了,密钥就在项目里,自己找吧
4.6、安装打印



如果日志是这样的,那恭喜你,你成功了。

四、第二个demo:插入一个开始页

1.影响:app 可能被插入广告
2.建议:进行签名校验
3.步骤:
3.1、生成demo_two.apk和demo_two_2.apk


运行得到demo_two.apk,将assets的demo_two文件已经写好Activity和布局文件,添加到相应位置运行得到demo_two_2.apk 也可以直接使用文件夹中两个apk
3.2、反编译demo_two.apk
命令:apktool d demo_two.apk(文件真实路径)
3.3、反编译demo_two_2.apk
命令:apktool d demo_two_2.apk(文件真实路径)
3.4、合并smali文件

demo_two_2.apk反编译smali文件夹中的a.smali(TimerTask的匿名内部类产品)和InsertActivity.smali拷贝到demo_two.apk反编译的文件中。
3.5、修改AndroidManifest.xml文件

去掉默认的启动标志,添加新的启动Activity
3.6、修改资源id

布局文件id可能在public.xml(res/values中)也有可能在R$layout.smali文件中(smail文件夹下)有可能是不同编译器版本造成的,
不在本篇讨论范围。layout id 最大的是0x7f04002e,在它的基础上加1即可(注意采用的是16进制)

过程中有可能遇到上面的错误,上面原因很明显id重复,说明新加的id不对。
3.7、修改smail文件的id

找到setContentView()可以快速定位,将id替换成步骤3.6中添加的id
3.8、重新打包
命令:apktool b demo_two(文件真实路径) -o demo_two_new.apk -
3.9、签名安装
如果先显示“这是一个注入的页面”恭喜你成功了。如果没见到这个页面可以反编译demo_two_crack.apk查看一下原因

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容