首页
社区
课程
招聘
[原创]永信至诚e春秋平台CTF比赛放大镜后门分析
2015-9-18 18:27 4822

[原创]永信至诚e春秋平台CTF比赛放大镜后门分析

2015-9-18 18:27
4822
前几天第一次参加CTF,遇到个比较有意思的逆向题,题目是要你分析一个易语言写的
方大镜后门程序,找到密码。

先用UE打开exe文件,以二进制方式查看能发现如下内容
00071200h: 00 00 00 30 40 25 34 38 25 35 38 25 34 32 25 37 ; ...0@%48%58%42%7
00071210h: 42 25 35 39 25 34 31 25 34 46 25 32 44 25 35 39 ; B%59%41%4F%2D%59
00071220h: 25 34 31 25 34 46 25 32 44 25 35 31 25 34 39 25 ; %41%4F%2D%51%49%
00071230h: 34 35 25 32 44 25 34 42 25 34 35 25 32 44 25 34 ; 45%2D%4B%45%2D%4
00071240h: 45 25 34 31 25 34 46 25 37 44 00 30 00 20 2F 61 ; E%41%4F%7D.0. /a
00071250h: 64 64 00 20 00 6E 65 74 20 75 73 65 72 20 00 6E ; dd. .net user .n
00071260h: 65 74 20 6C 6F 63 61 6C 67 72 6F 75 70 20 61 64 ; et localgroup ad
00071270h: 6D 69 6E 69 73 74 72 61 74 6F 72 73 20 00 48 49 ; ministrators .HI
00071280h: A3 BA 00 D5 CB BA C5 CC ED BC D3 B3 C9 B9 A6 A3 ; :.账号添加成功?
00071290h: A1 00 2D 00 33 38 2D 33 38 2D 32 43 2D 33 36 2D ; ?-.38-38-2C-36-
000712a0h: 34 32 2D 32 43 2D 33 34 2D 33 35 2D 32 43 2D 33 ; 42-2C-34-35-2C-3
000712b0h: 34 2D 34 35 2D 32 43 2D 33 39 2D 34 36 2D 32 43 ; 4-45-2C-39-46-2C
000712c0h: 2D 34 34 2D 33 36 2D 32 43 2D 34 31 2D 34 36 2D ; -44-36-2C-41-46-
000712d0h: 32 43 2D 33 35 2D 33 31 2D 32 43 2D 33 38 2D 34 ; 2C-35-31-2C-38-4

初步判断这些数据是找出明文密码的关键点。
将最前面的%48%58%42%7B%59%41%4F%2D%59%41%4F%2D%51%49%45%2D%4B%45%2D%4E%41%4F%7D
用URLDCODE方式解码出来是字符串HXB{YAO-YAO-QIE-KE-NAO},感觉象密码,一测试发现程序
虽然能弹出添加用户的框,但是无法成功添加用户,原来这只是个坑。

猜测下面一点的38-38-2C....长串或者再下面一点的
000713b0h: 2D 32 43 2D 34 34 2D 33 36 2D 32 43 00 35 32 2C ; -2C-44-36-2C.52,
000713c0h: 42 31 2C 33 36 2C 32 30 2C 44 30 2C 46 32 2C 33 ; B1,36,20,D0,F2,3
000713d0h: 33 2C 41 44 2C 43 44 2C 44 37 2C 45 45 2C 34 30 ; 3,AD,CD,D7,EE,40
000713e0h: 2C 34 30 2C 35 42 2C 31 34 2C 44 37 2C 31 36 2C ; ,40,5B,14,D7,16,
000713f0h: 35 30 2C 43 42 2C 34 41 2C 44 34 2C 45 34 2C 45 ; 50,CB,4A,D4,E4,E
00071400h: 45 2C 00 35 39 2C 44 33 2C 32 38 2C 30 43 2C 45 ; E,.59,D3,28,0C,E
00071410h: 30 2C 44 44 2C 31 38 2C 45 46 2C 45 33 2C 45 35 ; 0,DD,18,EF,E3,E5
00071420h: 2C 46 44 2C 30 38 2C 36 39 2C 36 32 2C 33 44 2C ; ,FD,08,69,62,3D,
00071430h: 39 35 2C 32 46 2C 37 30 2C 39 34 2C 32 41 2C 46 ; 95,2F,70,94,2A,F
00071440h: 30 2C 44 33 2C 46 36 2C 00 2C 00 31 00 32 00 33 ; 0,D3,F6,.,.1.2.3
可能是真实密码

然后IDA动态调试该EXE,经查找上述几处字符的引用函数是004037A4。在这个函数处下断
果然每次输完密码点OK都会在这儿被拦下。
快速对该函数进行分析发现该函数开头有VmprotectBeg_2 db 'VMProtect begin',0
字样,但其实该函数并没有被VMP保护。
进一步分析在
00403876 call    sub_403BCF      ; 这儿会把38-38-2C....长串中的-转换为%
然后在
00403986 call    chghash4027F3   ;这儿会把上面的长串转成一个33字节的HASH
转换后的值为
005EBF88  38 38 2C 36 42 2C 34 35  2C 34 45 2C 39 46 2C 44  88,6B,45,4E,9F,D
005EBF98  36 2C 41 46 2C 35 31 2C  38 46 2C 45 37 2C 39 33  6,AF,51,8F,E7,93
005EBFA8  2C 31 36 2C 38 38 2C 44  33 2C 30 43 2C 41 30 2C  ,16,88,D3,0C,A0,
005EBFB8  33 44 2C 34 35 2C 36 37  2C 33 44 2C 33 33 2C 38  3D,45,67,3D,33,8
005EBFC8  37 2C 43 44 2C 42 34 2C  31 41 2C 31 41 2C 32 34  7,CD,B4,1A,1A,24
005EBFD8  2C 44 37 2C 44 31 2C 44  39 2C 41 30 2C 42 41 2C  ,D7,D1,D9,A0,BA,
005EBFE8  44 36 2C 00 AB AB AB AB  AB AB AB AB EE FE EE FE  D6,.铪铪

其实转换方式就是两个ASCII码合成一个16进制中间2C直接转为,号
然后在下面一点的
004039EA call    mkpass404196    ; 这儿会将我们输入的明文密码加密为一个HASH
其中第二个参数应该是加密密钥,值为字符串19980101
然后在下面一点的
.text:00403A12 mov     eax, [ebp+var_4]
.text:00403A15 push    eax             ; 原HASH
.text:00403A16 push    [ebp+var_10]    ; 我的输入串的HASH
.text:00403A19 call    cmphash401004
是关键的比较,这儿会比较上述两个HASH是否相同,强制修改返回值EAX,会
发现接下来的流层中程序会用偏移000713bd处的那个HASH(52,B1,36,20,D0,F2,33,AD,CD,D7,EE,40,40.....)
解出来是一个23字节的字符串c:\windows\explorer.exe,然后运行explorer

如果HASH不相同,则会用偏移00071403处的HASH(59,D3,28,0C,E0,DD,18,EF,E3,E5,FD,08,69,....)
解出来那个假密码HXB{YAO-YAO-QIE-KE-NAO},然后直接比较明文是否是这个如果是这个
就弹出添加用户的框(但没有具体的加账号的代码这儿很骗人),如果不是则退出函数。

通过前面的分析整个程序基本流层就清楚了,那么解题关键就是
如何让我们输入的明文经过
.text:004039E0 push    1
.text:004039E2 lea     eax, [ebp+var_8] ; 估计是加密密钥:19980101
.text:004039E5 push    eax
.text:004039E6 lea     eax, [ebp+var_C]
.text:004039E9 push    eax
.text:004039EA call    mkpass404196    ; 将密码转成HASH
这儿的运算得出的HASH要是88,6B,45,4E,9F,D6,AF,51,8F,E7,93,16,88,D3,0C,A0,3D,45,67,3D,33,87,CD,B4,1A,1A,24,D7,D1,D9,A0,BA,D6

简单输入123或者123456之类的明文发现转出来的HASH和明文长度是相同的,还好这样的话就不会是MD5,SHA1之类的
摘要算法(如果是摘要算法要么无解要么还要跑密码,难度应该没这么大),而且还有个可疑的参数是19980101,那么多半是rc之类的
对称加密。对称加密通常会是通过一个密钥生成一定长度的乱数,然后用明文与乱数做XOR之类的运算得出密文。现在我们已经有密钥
和密文了,那么反解理论上肯定是OK的。
然后在动态调试程序的时候,动态修改内存将输入的明文改为
88,6B,45,4E,9F,D6,AF,51,8F,E7,93,16,88,D3,0C,A0,3D,45,67,3D,33,87,CD,B4,1A,1A,24,D7,D1,D9,A0,BA,D6
然后一看返回值果然是字符串:HXB{HAHA-HEHE-HEIHEI-HUOHUO-XIXI}
明文输入这个和假密码类似的串,成功运行explorer,解题成功!

后记:做这个题刚开始在GetWindowText函数下断一直不对,在假密码处也差点被坑死,时间有限
搞得很紧张,前后花了3个小时,回家后很轻松的在1小时之内搞定,看来CTF这种不止是考技术水平,
更多的是心理素质。

[培训]《安卓高级研修班(网课)》月薪三万计划

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 18
活跃值: (974)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
猪会被杀掉 1 2015-9-18 18:48
2
0
请问你是在帮“永信至诚”打广告吗?为啥不放可执行文件,难道要自己去“永信至诚e春秋平台CTF比赛”找这个程序?
雪    币: 1474
活跃值: (955)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
仙果 19 2015-9-18 20:51
3
0
楼主你写的有点乱,能否整理一下呢?
雪    币: 232
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Riverhac 2015-9-18 21:20
4
0
楼主最好放出可执行文件吧,其实是是否打广告的问题,其实我感觉并没有什么。还有楼主在整理整理
雪    币: 59
活跃值: (1481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zbzb 2015-9-18 21:54
5
0
加了vm标记,居然不用VMP去处理下,这是神马节奏。。。。
雪    币: 407
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2015-9-18 22:18
6
0
要程序的留下QQ吧,发给你
雪    币: 407
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2015-9-18 22:26
7
0
好我整理一下。
游客
登录 | 注册 方可回帖
返回