码迷,mamicode.com
首页 > 其他好文 > 详细

2018/12/05-Reverse_task1

时间:2018-12-06 01:35:47      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:分享   append   join   ida   str   word   电脑   循环   png   

 

链接:https://pan.baidu.com/s/1hOvHD0StXmpoqnB9S-8NGw 密码:7qce

这个题比较有意思,先让输入name,再输入key,再ida里可以轻松找到name为“nsfocus”,但是如果运行程序,name正确key错误的话,电脑会在一分钟内自动关机。

技术分享图片

 

进行分析,我们看有个Tls回调函数,一般这里面会有反调试。

技术分享图片

可以发现是检测进程名,我们在动态调试之前用winhex弄掉即可。

然后看main函数,main函数里面的东西比较乱,我们找终点关键即可。

技术分享图片

这里是获取输入的地方。

技术分享图片

这里是字符串数组“nomoney”,会在下面对输入进行处理的时候用到。

技术分享图片

这一串看着挺复杂,但其实就是用for循环倒序对输入中的每一个字符进行运算处理,其中v54-v17-1就是字符串总字符数-1。

我们可以发现for循环中主要是这两个运算。

技术分享图片

v39是一个字符串的首地址,dword_41E378是一个值,&v40是“nomoney”字符串的首地址。

我们用od动态调试可以得到v39字符串为"b9b7dd1c421e005bc9a7f70b848e3d0e",dword_41E378刚进for循环时值为2。

然后我们继续找,可以发现处理后的input与固定数据比较的地方。

技术分享图片

v36就是比较的数据,input是处理后的,v50-&input[1]是长度。

然后我们用od调可以得到比较数据。

然后写脚本即可得到flag。

arr = [0x51,0x3c,0x0f,0x67,0x5c,0x2c,0x41,0x53,0x6a,0x49,
       0x70,0x51,0x68,0x54,0x2b,0x23,0x5b,0x64,0x0e,0x60,
       0x6a,0x43,0x69,0x46,0x69,0x0c,0x25,0x41,0x72,0x44,
       0x16,0x72]
str = "b9b7dd1c421e005bc9a7f70b848e3d0e"
str1 = "nomoney"
a = 2
flag = []
for i in range(31,-1,-1):
    b = arr[i] ^ a ^ord(str1[i%7]) ^ ord(str[len(arr)-i-1])
    flag.append(b)
    a = arr[i]
flag.reverse()
print(‘‘.join(map(chr,flag)))

 

2018/12/05-Reverse_task1

标签:分享   append   join   ida   str   word   电脑   循环   png   

原文地址:https://www.cnblogs.com/Fingerprint/p/10074487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!