最近破解游戏包,出现了离奇的乌龙事件, 本来反编译工具一般可以直接看出xxtea key字符串。
我用这个字符串解密发现解密出来的还是乱码, 于是我就断定是key 经过处理了, 于是就想着动态调试,查看寄存器中的key值。
花了很多时间想着要动态调试,结果一动态调试就崩, 有的app加了反调试功能,没法动态调试,有的没有加反调试功能,也没法动态调试,可能是ida版本或者jeb版本太低吧。
因为我用的真机调试,不存在指令转换的问题。没法动态调试,就尝试修改二进制文件,让其输出xxtea key, 结果输出的xxtea key和反编译出来的key都是同一个key,
key并没有做任何处理. 我是不轻易言弃的人,肯定越挫越勇, 看了cocos源码, 才发现代码可能会被压缩。 经过解密,再解压缩,最终拿到了源码。
这次乌龙就是我只解密了,没有解压缩,所以看到是乱码。 内心一万个草泥马啊
我以前做游戏加密是修改xxtea key算法,让别人即使拿到key也无法正确解密
有的游戏包会加密key
有的游戏包会加密并压缩
有的游戏包会自定义加密
有的游戏包会加壳
当然有的游戏包修改了解释器(lua, js), 这种逼格很高,一般人玩不转。 这种修改会直接影响字节码。
总总的总总,不管加密方式(xxtea, ase, des等)如何,压缩方式(zip, gzip)如何, 游戏包最终会帮忙解密, 也就是说游戏包是最好的解密工具, 其他解密都是浮云。
这里解密的前提是一定要有壳的先砸壳,否则一切解密都是扯蛋。 砸壳也是一门学问,其思想核心就是内存dump.
于是乎,想了一个方式, 直接让游戏包还原我们想要的源码, 这就需要静态注入和动态注入了。直接将解密的源码输出到文件。
静态注入修改二进制文件,把输出文件的功能写到二进制文件。动态注入就是运行时注入,不修改原二进制文件。
这里我倾向静态注入,思路是注入一行函数, 例如: 在解密完成的地方加一行 exec("WFile filename 111111 123") 11111是解密的内容地址,123是内容长度。然后所有的交给WFile处理。
WFile是预先编写好的可执行程序, 给一个最低权限,也就任何人任何程序都可以执行它。