火影战记md5密值逆向
本帖最后由 从0开始的小小怪 于 2020-9-10 20:06 编辑最近玩了一个同人手游叫火影战记,最后的一个版本是1.22版,1.22版以前的版本中修改版很多,但因为之前的版本买不了装备所以打算自己动手看看。打开安装包可以发现火影战记中的英雄属性都是明文存放的xml文件,但是修改过后点击开始游戏会闪退。起初以为是安装包签名进行校验了,将安装包重新签名而不修改任何数据则不会出现闪退的情况。而且在游戏的资源目录下可以看到有一个md5的xml文件,初步判断应该是存在对属性资源的校验。
该游戏是用cocos2d制作的,游戏的逻辑都在native层,用ida反编译so文件搜索md5可以看到有几个相关的函数,稍微甄别后估计主要的逻辑在checkMD5函数当中。
可以看到在该函数中存在两次字符串的比较,目测第一次应该是文件名称,第二次则是md5值的比较。在这里因此图方便就不对算法进行分析了,考虑直接hook在libc.so里面的strcmp函数,把正确的md5值打印出来,之后再替换md5值从而过游戏的检测。
随意修改一个英雄的属性后,使用frida编写脚本进行hook,在参数传递的地方注意不能读到不可读的内存区域,否则容易报错。
```
import frida, sys, os, io
package_id = 'net.zakume.game'
dev = frida.get_usb_device(timeout=1)
process = dev.attach(package_id)
src = '''
function IsNumOrAlphabet(c){
if(c >= '0' || c <= '9')return true;
else if(c >= 'a' || c <= 'z')return true;
return false;
}
var addr = Module.findExportByName(
"libc.so",
"strcmp"
);
Interceptor.attach(addr, {
onEnter: function(args) {
var flag = false;
var str1 = Memory.readCString(ptr(args),3);
var str2 = Memory.readCString(ptr(args),3);
if(IsNumOrAlphabet(str1)){
str1 = Memory.readCString(ptr(args),32);
flag = true;
}
if(IsNumOrAlphabet(str2)){
str2 = Memory.readCString(ptr(args),32);
flag = true;
}
if(flag){
var obj = {};
obj.str1 = str1;
obj.str2 = str2;
send(obj);
}
}
} )
'''
script = process.create_script(src)def on_message(message, data):
str1 = message['payload']['str1']
str2 = message['payload']['str2']
with open('str.txt','a',encoding = 'utf-8') as f:
if str1.isalnum() and str2.isalnum():
f.write(str1 + ' ' + str2 + '\n')
script.on('message', on_message)
script.load()
sys.stdin.read()
```
运行脚本之后成功得到了一些字符串,直接拉到最底下可以发现这里存在着两个不匹配的字符串,其中一个是原来文件的md5的值,另一个则是修改过后的文件的md5值。到这里md5的检测已经成功通过了。
将md5的值进行替换后重新进入游戏发现已经不再闪退,但是选好人物之后游戏的资源却加载不出来了{:301_999:}
估计游戏应该还存在另外的检测,由于得准备考试,时间的原因研究到这里我便停止了{:301_971:}
感兴趣的可以接着试试之后的检测在哪。 我还记得作者网名叫 小岛多惠 七度空间 发表于 2020-9-10 19:01
这游戏以前挺喜欢玩的 不错的单机手游 后来腾讯出了一款火影手游 画质奥义 都非常不错 加上这个游戏换手机 ...
作者用爱发电,美化版修改版太多他就没继续更新下去的欲望了,后来服务器还被人入侵,就顺势彻底放弃了更新。挺可惜的,这游戏我感觉还挺有意思的,要是作者懂些安全防护的手段,对资源文件都加密,结果也不至于这样。 如果直接把 md5.xml 的对应条目清空,是会拒绝加载还是不验证签名? jixun66 发表于 2020-9-10 18:48
如果直接把 md5.xml 的对应条目清空,是会拒绝加载还是不验证签名?
一样的,直接闪退,1.22版本之前好像他们做的修改版就是清空md5.xml文件,1.22就不行了。 这游戏以前挺喜欢玩的 不错的单机手游 后来腾讯出了一款火影手游 画质奥义 都非常不错 加上这个游戏换手机后存档都消失了 干脆就放弃这游戏了 厉害,支持一个 赞赞赞,不错,谢谢楼主。 厉害厉害赞{:301_1009:} 以前玩过,感觉不错,在下载纪念下 只能可惜作者了