-
-
某非法手游协议分析与测试
-
发表于:
2021-2-3 22:24
12616
-
一个朋友说在某个棋牌app上打麻将输了钱,怀疑是被平台坑了,想让平台付出点代价,这可把我难倒了,我哪里有这本事?但是考虑到闲着不如找点乐子,还是答应帮他看一下。
解压该apk,在lib下面发现libil2cpp.so文件,确定该程序为u3d程序。但是并没有找到global-metadata.dat文件,应该是加密了。u3d程序在il2cpp后,运行时需要解析global-metadata.dat来调用相应的函数指针,如果不拿到这个文件,很难去分析libil2cpp.so内的函数。这里直接在程序内存中搜索内存中搜素AF 1B B1 FA就能将其dump下来。如果程序是边执行边解密,那就需要去分析他的解密逻辑。
打开程序后的数据包很少,并没有向服务器请求资源文件。
抓取登录包:

http的包,除了图片中的请求头以外,还有post的参数没有截图。
使用Perfare大佬的 Il2CppDumper对该程序的libil2cpp.so进行dump,得到c++头文件和ida脚本,用ida脚本将字符串和结构体等信息进行导入
这里遇到了一些问题,头文件中部分结构体的字段中出现乱码:

至今还不知道是什么原因,以前也没有遇到过,希望有经验的大佬可以指点一下。 出现乱码的地方很多,导致很多结构体不能正常导入ida,这里我把一些出现乱码的重要的结构体(比如Il2CppClass ),手动删除乱码后导入了ida中。
对使用不同手机在不同网络下用不同的用户名登录的请求包进行对比,发现cty和client_id 为相同值,简单分析后确定这两个值为固定值。
QA字段:数据被URLEncode过,因为函数名已经通过ida脚本修改过了,所以直接在ida中搜索URLEncode查找到相关函数,简单分析即可定位关键代函数0xF3BD84,用frida hook该函数得到:
参数:
1 |
mobile = 15856563669 &password = 1234567890 &version = 4.0 . 18 &os = android
|
返回值:
1 |
ptenoj@ 68 = 8 ; 8 ; 6 ; 9 >)udxv|rwgb47698;: = < 5 ){hwvnrs@ 91516 ; + rx@fqiutli
|
函数先调用System_String__ToCharArray将字符串转换为字符数组,然后对其进行以下计算:
[注意]看雪招聘,专注安全领域的专业人才平台!
最后于 2021-2-3 22:25
被某警官编辑
,原因: