一、目标

一、目标

李老板:奋飞呀,给咱们开发Android App的程序员删库跑路了,明天投资人就要过来,咱们得把App换个图标和名字呀?

奋飞:这个得先把五一的加班费结一下。

二、步骤

拆包

Android App的安装包Apk文件本质上是一个zip压缩包,直接把后缀改成zip,就可以解压,然后修改完再压缩回去不就行了? 本文完……

现实是没有那么简单的,作为逆向工程师,必须要把 简单的事情复杂化,这样才能体现你的价值。

解压在我们这里不叫解压,叫拆开安装包,简称 拆包。是不是立马高大上了。

因为Apk的安装包有一些特殊处理,所以我们需要用特殊的工具去拆包 apktool

# d 拆包
# f 待拆包的apk
# o 输出拆包结果的文件夹
apktool d -f example.apk -o tmp_apk_dir

修改文件

App的名字等字符串信息一般都是放在

…​/tmp_apk_dir/res/values/strings.xml

这个xml文件里面

把 <string name="app_name">xx本子</string>

改成 <string name="app_name">李老板本子</string>

App的图标一般都是放在

tmp_apk_dir/res/mipmap-xhdpi/icon.png

其他的mipmap-xxx文件夹是不同分辨率下的图标,可以统统给他换了。

打包,签名

修改好了之后就可以用 apktool重新打包了

apktool b tmp_apk_dir -o unsigned_new.apk

签名文件是为了证明这个apk是你的,防止被别人篡改,所以咱们修改了apk之后,由于没有原始的签名文件,只能生成一个新的。

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias mykey

参数解释:

-keystore my-release-key.jks:生成的签名文件名。

-keyalg RSA:加密算法。

-keysize 2048:密钥长度。

-validity 10000:证书有效期(单位:天)。

-alias mykey:密钥别名,可自定义。

最后一步就是给重新打包的apk做签名了

apksigner sign --ks my-release-key.jks --ks-pass pass:fenfei --ks-key-alias mykey --out your_app_new.apk unsigned_new.apk
setup
1:setup

看上去没啥问题,不过我们细心的码农还是会启动验证一下,看看有没有问题。

start1
1:start1

坏蛋,果然给我们埋坑了。

过坑

跑路的程序员还是厚道,明明白白告诉咱们是由于签名被篡改了。

上jadx,搜索 签名被篡改

modify1
1:modify1

需要把这个 if判断干掉

问了一下AI,把对应的 Smail 代码中对应的 if-nez p1 改成 if-eqz p1 就行了

TIP:

| if-nez p1 | 如果 p1 != 0,则跳转(非零成立) |

| if-eqz p1 | 如果 p1 == 0,则跳转(零成立) |

真的没必要去学Smail语法了,现成的AI在嗷嗷待哺

三、总结

由于apk修改起来太容易了,所以程序员gg们会在里面埋更多的坑。加壳 反调试 混淆 前面还有无数困难等着你。

李老板决定还是招个程序员鼓励师比较靠谱。

ffshow
1:ffshow

非真空不宜谈禅,非真旷不宜饮酒。

100

关注微信公众号,最新技术干货实时推送

100