在linux中执行程序,提示段错误。
静态分析:
ida打开文件。找到main函数。
在调试时,发现在authenticate()会卡住无法执行。
说明程序在authenticate()中存在错误。
进入authenticate()函数内部。发现了个加密函数decrypt()。
传入了s2和dword_8048A90。
内部的逻辑是将传入这个函数的第一个数组减去第二个数组的值。
查看s和dword_8048A90处的值。
shift+e整合下来。编写代码。
s = [0x143A, 0x1436, 0x1437, 0x143B, 0x1480, 0x147A, 0x1471, 0x1478, 0x1463, 0x1466, 0x1473, 0x1467, 0x1462, 0x1465, 0x1473, 0x1460, 0x146B, 0x1471, 0x1478, 0x146A, 0x1473, 0x1470, 0x1464, 0x1478, 0x146E, 0x1470, 0x1470, 0x1464, 0x1470, 0x1464, 0x146E, 0x147B, 0x1476, 0x1478, 0x146A, 0x1473, 0x147B, 0x1480] """ 3A 14 00 00 36 14 00 00 37 14 00 00 3B 14 00 00 80 14 00 00 7A 14 00 00 71 14 00 00 78 14 00 00 63 14 00 00 66 14 00 00 73 14 00 00 67 14 00 00 62 14 00 00 65 14 00 00 73 14 00 00 60 14 00 00 6B 14 00 00 71 14 00 00 78 14 00 00 6A 14 00 00 73 14 00 00 70 14 00 00 64 14 00 00 78 14 00 00 6E 14 00 00 70 14 00 00 70 14 00 00 64 14 00 00 70 14 00 00 64 14 00 00 6E 14 00 00 7B 14 00 00 76 14 00 00 78 14 00 00 6A 14 00 00 73 14 00 00 7B 14 00 00 80 14 """ a = [0x1401, 0x1402, 0x1403, 0x1404, 0x1405] v6 = len(s) v7 = len(a) l = 0 for i in range(v6): if l >= v7: l = 0 s[i] -= a[l] l += 1 for i in s: print(chr(i), end=‘‘)
动态调试:
F7进入authenticate()函数中,F8步过decrypt。双击下方的eax便可以看到flag。
原文:https://www.cnblogs.com/TNTBomb/p/12757834.html