libuserinfo.so - getName (0x1)
说在前面的话
本来想只看汇编来一行行的分析的,其实我还学了近半个月的汇编。。。不过看到这个算法的汇编代码我第一个想法就是放弃,下次吧,(:
说实话这个getName很简单,本来想从汇编开始分析的。。。但我看到那个排序算法我就头大,这次就放弃吧
正文
先来伪代码
1 | char *__fastcall getName(int v25_serverTime, char *params, char *a3) |
第一个参数时间戳
第二参数是拼接后的url参数中的value,不过这里的这个value有点不同,它拼接的时候排序
过,顺序就是按照参数key的顺序(a-z)排序的
,用python sorted
就知道了
第三个参数是个空参数
返回结果就是我们要的东西了
参数结果hook代码如下
1 | String.prototype.format = function () { |
输出
1 | [*] Running CTF |
从这个getName伪代码中可以看到又调用了一个名为getName的方法,其伪代码以及不知道我什么是时候写的注释如下
1 | // 这个方法应该是个加密方法 |
这里我们只需要看那个排序方法shuffle
1 | // 字符串随机排序 |
排序方法对应python代码
1 | def shuffle(result, array): |
getName对应python代码
1 | def get_name(server_time, params): |
我已经测试了很多次了,和hook到的结果一毛一样,当然不信的话可以用上面hook到的结果测试
最后
emmm,这个最后获取结果好像就这些了吧(好敷衍呀),等我啥时候想起来要补充的再添加吧,太饿了。。。。