DaNianChuErNoadopted 逆向过程和思路

查看 4|回复 0
作者:zunmx   
引言:
怀着一个激动的内心写一篇反向思考教程,这也是第一次写,如有不对的地方,还请各位大佬轻喷哈。
帖子链接
思考过程:
题目中说没有加壳,C语言写的,那就考虑用x96dbg和IDA了,因为有些语言,比如说vb,Delphi这些是有工具取得源码的。
先扔进x32dbg中看一下,查找关键字符串,


image.png (51.83 KB, 下载次数: 0)
下载附件
引用
2025-1-29 22:55 上传

打上断点,实际上字符串最近的断点作用不大,因为上面的条件如果不匹配,就直接到了错误那里了,所以找到根源。


image.png (255.84 KB, 下载次数: 0)
下载附件
断点
2025-1-29 22:54 上传

根据其中的一些提示,肯定是有`Ha`这两个字符的了,因为学的不精,扔到ida中F5吧。


image.png (84.98 KB, 下载次数: 0)
下载附件
ida
2025-1-29 22:56 上传

其中一些变量,我用python分析了一下,这里也包含用眼睛看出来的
v2
[color=]=
72
v3
[color=]=
[color=]154  
# v3 == v4
v4
[color=]=
[color=]154  
# v3 == v4
v5
[color=]=
[color=]32
[color=]*
154
v7
[color=]=
a1
[color=][
[color=]5
]
v10
[color=]=
[color=]97
经过上面的分析,v2和v10,是H和a,才能走到if真里面去
这段代码是猜测v3和v4的值的
# for i in range(1, 122):
#     print(i,((i >> 2) ^ 32*i ^ ~((i >> 2) & 32*i)) == -3613) #  112
[color=]#     print(chr(112))
经过一系列的试测,得到i=112,也就是`p`,此时得到这个字符串应该是Happ开头,这里猜测应该是Happy,但是这个y是怎么来的?
((unsigned __int8)a1[1] ^ 0x18) == (_BYTE)v5
其中已知a1[1] == ‘a’ == 97 ,97 …… 0x18 == 121 也就是`y`
此时已经知道了前五个字符是Happy了。
接下来分析(double)(int)(__int64)(cos(1.36690694026) * 10000.0 + 0.5) * 0.0001 == (double)v9 * 0.0001 ) ,先算一下这个是什么
print((cos(1.36690694026) * 10000.0 + 0.5) * 0.0001) # 0.20252967626955654
其中(double)v9 * 0.0001  == 上面的结果 , 取整后是2025
基本上也就能猜出答案是Happy2025。
当我做出来后问了一下GPT,答案和我做出来的也不太一样,虽然AI很强,但是有些时候还是需要人工去甄别的。

下载次数, 断点

您需要登录后才可以回帖 登录 | 立即注册

返回顶部