首页
社区
课程
招聘
[原创]看雪CTF.TSRC 2018 团队赛 第二题 半加器 WP
发表于: 2018-12-24 16:28 3809

[原创]看雪CTF.TSRC 2018 团队赛 第二题 半加器 WP

ccfer 活跃值
16
2018-12-24 16:28
3809
看雪CTF.TSRC 2018 团队赛 第二题 半加器

这题直接分析流程细节的话,发现会有很深层的调用
所以直接使用硬件断点法追踪数据变化过程,可以省去不少力气

入手点:
004A19D8   68 BC255B00      PUSH Exam.005B25BC                       ; ASCII "Please Input:"
004A19DD   68 E0315F00      PUSH Exam.005F31E0
004A19E2   E8 5FB3FEFF      CALL Exam.0048CD46
004A19E7   83C4 08          ADD ESP,8
004A19EA   6A 1E            PUSH 1E
004A19EC   68 68305F00      PUSH Exam.005F3068                       ; 输入值
004A19F1   68 9C225B00      PUSH Exam.005B229C                       ; ASCII "%s"
004A19F6   E8 F3A6FEFF      CALL Exam.0048C0EE
004A19FB   83C4 0C          ADD ESP,0C
004A19FE   68 68305F00      PUSH Exam.005F3068                       ; 输入值
004A1A03   E8 9E8FFEFF      CALL Exam.0048A9A6
004A1A08   83C4 04          ADD ESP,4
004A1A0B   8945 F8          MOV DWORD PTR SS:[EBP-8],EAX
004A1A0E   837D F8 1E       CMP DWORD PTR SS:[EBP-8],1E             //长度检查<30
004A1A12   7F 06            JG SHORT Exam.004A1A1A
004A1A14   837D F8 0A       CMP DWORD PTR SS:[EBP-8],0A             //长度检查>=10
004A1A18   7D 16            JGE SHORT Exam.004A1A30
004A1A1A   68 CC255B00      PUSH Exam.005B25CC
004A1A1F   E8 B78CFEFF      CALL Exam.0048A6DB
004A1A24   83C4 04          ADD ESP,4
004A1A27   6A 00            PUSH 0
004A1A29   E8 46A8FEFF      CALL Exam.0048C274
004A1A2E   EB 4E            JMP SHORT Exam.004A1A7E
004A1A30   68 68305F00      PUSH Exam.005F3068                       ; 输入值
004A1A35   6A 1E            PUSH 1E
004A1A37   A1 88305F00      MOV EAX,DWORD PTR DS:[5F3088]
004A1A3C   50               PUSH EAX
004A1A3D   E8 7DCBFEFF      CALL Exam.0048E5BF
004A1A42   83C4 0C          ADD ESP,0C
004A1A45   B8 01000000      MOV EAX,1
004A1A4A   6BC8 07          IMUL ECX,EAX,7
004A1A4D   8B15 88305F00    MOV EDX,DWORD PTR DS:[5F3088]
004A1A53   0FBE040A         MOVSX EAX,BYTE PTR DS:[EDX+ECX]
004A1A57   83F8 41          CMP EAX,41                              //第8个字符必须是'A'
004A1A5A   74 14            JE SHORT Exam.004A1A70
004A1A5C   68 CC255B00      PUSH Exam.005B25CC
004A1A61   E8 758CFEFF      CALL Exam.0048A6DB
004A1A66   83C4 04          ADD ESP,4
004A1A69   6A 00            PUSH 0
004A1A6B   E8 04A8FEFF      CALL Exam.0048C274
004A1A70   A1 88305F00      MOV EAX,DWORD PTR DS:[5F3088]           //对此输入数据下硬件断点
004A1A75   50               PUSH EAX
004A1A76   E8 29B9FEFF      CALL Exam.0048D3A4

硬件断点第二次断下来会在这里:
0049DC30   0FBE08           MOVSX ECX,BYTE PTR DS:[EAX]
0049DC33   83F1 1F          XOR ECX,1F
0049DC36   8B55 08          MOV EDX,DWORD PTR SS:[EBP+8]
0049DC39   0355 F8          ADD EDX,DWORD PTR SS:[EBP-8]
0049DC3C   880A             MOV BYTE PTR DS:[EDX],CL
0049DC3E  ^EB D0            JMP SHORT Exam.0049DC10
会发现第8个字符变成了'#',并把每个字符xor 0x1F,处理完之后再对数据下硬件断点

然后再断下来后就能看到和"urj}pux<}n{iqyrh"比较
所以把"urj}pux<}n{iqyrh"异或0x1F,再把第8个字符替换成'A',即可得到最后结果:
jmubojgAbqdvnfmw




[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//