吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

[Android 原创] 月X之夜过签名验证

  [复制链接]
鹿慕 发表于 2021-6-21 17:54
本帖最后由 鹿慕 于 2021-6-21 18:02 编辑
  • 游戏版本:月⭕️之夜_1.6.5.apk (5月份下的现在可能跟新过了),下载来源:taptap平台

  • 先上一张最终效果图

  • 狼人过关图

这个游戏经测试只要你修改了文件内容就会被检测出异常。但是你不改文件内容就算重签名了他也不会检测出异常。猜测这个游戏用了文件检测crc算法。需要分析找出对游戏做检测的so文件。

经过反复试验,定位出做了验证的so文件是libganalysis.so。

1.将libganalysis.so文件拖入ida32位中进行分析。

image-20210621170828125

发现函数列表中名字有带crc的,非常可疑。选择crc32,并打开调用该函数的几个关联地址,选择第一个试验。

2.查看一下整体的流程执行图

image-20210621171406797

效果如下:

image-20210621171256357

可以看到crc方法在中间被调用了,应该是用来检测apk文件有没有被修改过。我的思路就是直接从头部跳到尾部,直接跳过验证。经试验是可以的。

  • 头部拉近截图:

image-20210621171604111

  • 尾部拉近截图:

image-20210621171636246

所以我只要直接从头部跳到尾部,分析下头部指令,把跳转位置改了,直接跳转到尾部:

image-20210621171733564

这里我使用MT管理器修改 libganalysis.so文件   0005D49A 处 06D1 改成 01E0 就可以了。

后续

这次破解其实有点运气好,基于猜测做的修改,没想到直接成功了,也是很懵逼的。

后续破解的游戏dlc,需要破解它的libil2cpp.so、global-metadata.dat文件,导出函数信息。但是这个

global-metadata.dat被加密了。直接用工具是dump不出来的。我这里用了frida去hook出了它的函数名和地址信息。经试验就是改这个函数就可以解锁所有dlc了

ProtoLogin:isUnlockRole -> 0x81959c
  • Frida hook 脚本(没有root的手机,用的frida-gadget方案)
// struct Il2CppClass
// {
// const Il2CppImage* image;
// void* gc_desc;
// const char* name;
// const char* namespaze;
// ...
// }
// struct MethodInfo
// {
// Il2CppMethodPointer methodPointer;
// InvokerMethod invoker_method;
// const char* name;
// Il2CppClass *declaring_type;
// const Il2CppType *return_type;
// const ParameterInfo* parameters;
// ...
// };

//写文件
function writeFile(content) {
var file = new File("/sdcard/hook/dump.txt", "a+")//a+表示追加内容,此处的模式和c语言的fopen函数模式相同
file.write(content + "\n")
file.flush()
file.close()
}

//真机arm32版本
function dumpOnArm() {
var base_addr = Module.findBaseAddress("libil2cpp.so")
var offset = 0x003EE9F8 //这里的偏移量不同的架构值不一样
var p_size = 4 //(32位 armv7 x86) (64位写8 armv8 x86-64 )
Interceptor.attach(base_addr.add(offset), {
//在hook函数之前执行的语句
onEnter: function (args) {
var newMethod = this.context.r5 //r5表示R5 64位的arm用x5 需要查看具体的寄存器
var pointer = newMethod.readPointer() //MethodInfo
var name = newMethod.add(p_size * 2).readPointer().readCString()
var klass = newMethod.add(p_size * 3).readPointer() //Il2CppClass
var klass_name = klass.add(p_size * 2).readPointer().readCString()
var klass_spaze = klass.add(p_size * 3).readPointer().readCString()
//console.log(klass_spaze + ":" + klass_name + ":" + name + " -> " + pointer.sub(base_addr))
writeFile(klass_spaze + ":" + klass_name + ":" + name + " -> " + pointer.sub(base_addr))
},

onLeave: function (retval) {

}
})
}

setImmediate(dumpOnArm)

免费评分

参与人数 10吾爱币 +12 热心值 +10 收起 理由
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CCZ_ + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
小十二 + 1 + 1 用心讨论,共获提升!
Donbin69 + 1 + 1 用心讨论,共获提升!
罗罗诺亚na + 2 + 1 虽然解锁dlc没看懂,但还是点个赞吧
莫等闲233 + 1 + 1 谢谢@Thanks!
低调(d-iao) + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
我是神的亲戚 + 1 + 1 我很赞同!
cjethro + 1 + 1 热心回复!
Stap + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

猛男z 发表于 2021-6-21 19:55
感谢分享。虽然不是很懂
闷骚小贱男 发表于 2021-6-21 21:27
本帖最后由 闷骚小贱男 于 2021-6-21 21:28 编辑

今天分析一个unity的APP sign加密
刚用Il2CppDumper和libil2cpp.so解global-metadata.dat成了DLL..
但是可惜并没找到相关的代码  可能是我技术有限
daidaiv 发表于 2021-6-21 18:14
cjethro 发表于 2021-6-21 18:34
关注楼主好久了。可以的 话,请发个成品给小白我?

点评

禁止发布破解成品  详情 回复 发表于 2021-6-21 19:35
难为阿! 发表于 2021-6-21 18:42
那是不是可以基于这个解锁所有DLC?
头像被屏蔽
大大连连 发表于 2021-6-21 18:42
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 鹿慕 发表于 2021-6-21 18:54
难为阿! 发表于 2021-6-21 18:42
那是不是可以基于这个解锁所有DLC?

对的可以的
GenW 发表于 2021-6-21 19:35
cjethro 发表于 2021-6-21 18:34
关注楼主好久了。可以的 话,请发个成品给小白我?

禁止发布破解成品
 楼主| 鹿慕 发表于 2021-6-21 21:49
闷骚小贱男 发表于 2021-6-21 21:27
今天分析一个unity的APP sign加密
刚用Il2CppDumper和libil2cpp.so解global-metadata.dat成了DLL..
但是 ...

什么游戏?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 13:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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