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 。