无名商城论坛

搜索
查看: 320|回复: 0

[技术教程] 【破解教程】破解牛奶大佬的"小黑侠练习"

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 14:14:49 | 显示全部楼层 |阅读模式
先说一下破解过程,
1首先新建一个assets文件夹,将CM3.jar放到里面,再把整个文件夹添加到apk中,
2.反编译dex,找到MainActivity的onCreate方法添加调用代码,再把a方法(带有byte数组参数的那个)中的输出流的三行代码删掉,如图1所示
3.将LoadCM3.smali扔到反编译后的文件夹后开始编译
4.将生成的dex放到安装包签名安装即可

再说一下破解思路,
我拿到apk刚反编译成源码一看,首先是混淆,然后没找到布局文件,再一看代码一堆莫名其妙的字节数组的处理和文件的处理,看的我一脸懵逼[呼~],然后沉下心来一行一行的调试,之后大体的过程是这样的:
顺着代码开始走,发现一开始是从/data/app目录下找到自身的安装包,然后把安装包中的dex文件读到一个字节数组中,再取其中最后1900个字节通过一个看不懂的莫名奇妙的算法对数组进行处理后,通过输出流转换为一个名字为"CM3.jar"的文件到cache目录下,我去好神奇,这是怎么办到的[疑问],最后通过反射调用里面的方法后删除cache及里面的文件。
到这里我猜测布局可能在反射调用的方法设置的,然后我自以为很机智的把最后那个删除文件的调用代码删掉,结果相信大家都碰到了相同的情况,按钮没了[滑稽],想了半天才想明白原来修改代码后,读取最后的1900个字节也会变化,生成的jar包也将变化,里面的方法就不能调用了,这么说还改不了代码了[阴险],不能忍。
于是开始按部就班的再看一遍代码,发现通过压缩文件获取classes.dex这个名字拿到的输入流,而这个名字是在清单文件中Activity节点下的meta-data节点下的value属性来拿到的,这时候楼主来了思路,先把classes.dex文件复制一份重命名为classes.dex.bak,再将清单文件中Activity节点下的meta-data节点下的value属性修改为classes.dex.bak后这样就可以放心的修改classes.dex文件了,因为到时候会获取classes.dex.bak这个文件,而这个文件和之前classes.dex文件是一样的内容。
这样把刚才最后调用的那个删除cache目录的代码删掉后,拿到了一个不是.jar的文件,于是应该是反射调用改变了文件,再把反射调用的代码删掉后,顺利拿到了.jar文件,然后打开一看,里面果然有一个dex文件,里面有个类调用方法就是给当前的Activity添加按钮,并为按钮设置里监听事件,监听事件就是点击弹窗购买失败,这里我真的很好奇,这是怎么办到的[疑问][疑问]
然后把购买失败改为购买成功,添加到assets文件夹,再通过代码把他读到cache文件夹下,然后需要删掉原来的通过字节数组生成的.jar文件(还是忍不住说一声好神奇[滑稽]),这样就能保证每次都调用修改后的类的方法了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表