吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7277|回复: 43
收起左侧

[Android 原创] 火影战记md5密值逆向

  [复制链接]
从0开始的小小怪 发表于 2020-9-10 18:29
本帖最后由 从0开始的小小怪 于 2020-9-10 20:06 编辑

最近玩了一个同人手游叫火影战记,最后的一个版本是1.22版,1.22版以前的版本中修改版很多,但因为之前的版本买不了装备所以打算自己动手看看。打开安装包可以发现火影战记中的英雄属性都是明文存放的xml文件,但是修改过后点击开始游戏会闪退。起初以为是安装包签名进行校验了,将安装包重新签名而不修改任何数据则不会出现闪退的情况。而且在游戏的资源目录下可以看到有一个md5的xml文件,初步判断应该是存在对属性资源的校验。
1.jpg
该游戏是用cocos2d制作的,游戏的逻辑都在native层,用ida反编译so文件搜索md5可以看到有几个相关的函数,稍微甄别后估计主要的逻辑在checkMD5函数当中。
2.png
可以看到在该函数中存在两次字符串的比较,目测第一次应该是文件名称,第二次则是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[0]),3);
        var str2 = Memory.readCString(ptr(args[1]),3);
        if(IsNumOrAlphabet(str1[0])){
            str1 = Memory.readCString(ptr(args[0]),32);
            flag = true;
        }
        if(IsNumOrAlphabet(str2[0])){
            str2 = Memory.readCString(ptr(args[1]),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的检测已经成功通过了。
3.png
将md5的值进行替换后重新进入游戏发现已经不再闪退,但是选好人物之后游戏的资源却加载不出来了
估计游戏应该还存在另外的检测,由于得准备考试,时间的原因研究到这里我便停止了
感兴趣的可以接着试试之后的检测在哪。

免费评分

参与人数 13吾爱币 +12 热心值 +13 收起 理由
寂6497 + 1 我很赞同!
xingyiba + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
流浪的猫 + 1 + 1 谢谢@Thanks!
love61828314 + 1 + 1 我很赞同!
唐僧丢了袈裟 + 1 + 1 热心回复!
YYL7535 + 1 + 1 谢谢@Thanks!
56598006 + 1 我很赞同!
daxin09 + 1 + 1 我很赞同!
没错就是我Feng + 1 + 1 可以嗷
风绕柳絮轻敲雪 + 2 + 1 谢谢@Thanks!
KYEICK + 1 用心讨论,共获提升!
爱飞的猫 + 2 + 1 用心讨论,共获提升!
waltzofjack + 2 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

OceanJ4Nnn 发表于 2020-9-12 01:32
我还记得作者网名叫 小岛多惠
 楼主| 从0开始的小小怪 发表于 2020-9-10 20:09
七度空间 发表于 2020-9-10 19:01
这游戏以前挺喜欢玩的 不错的单机手游 后来腾讯出了一款火影手游 画质奥义 都非常不错 加上这个游戏换手机 ...

作者用爱发电,美化版修改版太多他就没继续更新下去的欲望了,后来服务器还被人入侵,就顺势彻底放弃了更新。挺可惜的,这游戏我感觉还挺有意思的,要是作者懂些安全防护的手段,对资源文件都加密,结果也不至于这样。
爱飞的猫 发表于 2020-9-10 18:48
如果直接把 md5.xml 的对应条目清空,是会拒绝加载还是不验证签名?
 楼主| 从0开始的小小怪 发表于 2020-9-10 18:55
jixun66 发表于 2020-9-10 18:48
如果直接把 md5.xml 的对应条目清空,是会拒绝加载还是不验证签名?

一样的,直接闪退,1.22版本之前好像他们做的修改版就是清空md5.xml文件,1.22就不行了。

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
爱飞的猫 + 3 + 1 热心回复!

查看全部评分

七度空间 发表于 2020-9-10 19:01
这游戏以前挺喜欢玩的 不错的单机手游 后来腾讯出了一款火影手游 画质奥义 都非常不错 加上这个游戏换手机后存档都消失了 干脆就放弃这游戏了
xy0225 发表于 2020-9-10 19:52
厉害,支持一个
daxin09 发表于 2020-9-10 20:40
赞赞赞,不错,谢谢楼主。
Edwin_9527 发表于 2020-9-10 20:51
厉害厉害  赞
斩风 发表于 2020-9-10 21:09
以前玩过,感觉不错,在下载纪念下
woyaoshangshiqi 发表于 2020-9-10 21:55
只能可惜作者了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 03:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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