2018/12/05-Reverse_task1

Posted fingerprint

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/12/05-Reverse_task1相关的知识,希望对你有一定的参考价值。

 

链接: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的主要内容,如果未能解决你的问题,请参考以下文章

2022-01-08:数组中只有0和1,每过1代,0旁边只有1个1,当前0会变成1。每过1代,0旁边有2个1,当前0还是0。 比如10001,经过1代,会变成11011,再过1代,还是11011 。

R留学生作业代码代写代编程代编程代编程

JVM年轻代年老代永久代

是堆内存分为年轻代和年老代!!!

sql语句代编写sql 游标 事务代写

jvm之年轻代(新生代)老年代永久代以及GC原理详解GC优化