[De1CTF2019]Re_Sign
[De1CTF2019]Re_Sign
6 再次练习了动调技巧...
首先要脱一个比较奇怪的UPX 正常工具脱不了 dump出来导入表没重建 不能动调
然而这个工具却可以

人麻了...
然后开始动调分析

注意 findcrypt识别时有两个base64table!
sub_401233的变表是在一个大循环内部完成的 这里用ollydbg动调能看出来
x32dbg都找不怎么着...

5cA678即为变表的位置
可以提取出来
0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm+/

v4那儿就是一个copy
关注check点的函数

传的是一个正常的base表
下面这个是find_pos典型操作

结合动调得到的数据 E->5 那么对照表一看 就是一个位置映射
b64table[5-1]='E'

提取出比对数据映射回去解个变表b64
exp:
print('1'*36)
enc = [0x00000008, 0x0000003B, 0x00000001, 0x00000020, 0x00000007, 0x00000034, 0x00000009, 0x0000001F, 0x00000018, 0x00000024, 0x00000013, 0x00000003, 0x00000010, 0x00000038, 0x00000009, 0x0000001B, 0x00000008, 0x00000034, 0x00000013, 0x00000002, 0x00000008, 0x00000022, 0x00000012, 0x00000003, 0x00000005, 0x00000006, 0x00000012, 0x00000003, 0x0000000F, 0x00000022, 0x00000012, 0x00000017, 0x00000008, 0x00000001, 0x00000029, 0x00000022, 0x00000006, 0x00000024, 0x00000032, 0x00000024, 0x0000000F, 0x0000001F, 0x0000002B, 0x00000024, 0x00000003, 0x00000015, 0x00000041, 0x00000041]
changed_b64_table = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm+/"
ord_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
ct = ""
for c in enc:
try:
ct += ord_table[c-1]
except:
pass
print(ct)
# H6AfGzIeXjSCP3IaHzSBHhRCEFRCOhRWHAohFjxjOeqjCU

de1ctf{E_L4nguag3_1s_K3KeK3_N4Ji4}

浙公网安备 33010602011771号