欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]第二题 ctf2017_Fpc

[原创]第二题 ctf2017_Fpc

1. 清晰的程序结构

2. 得出等式:
5(x-y)+x= 0x8F503A42
13(x-y)+y= 0xEF503A42
17(x-y)+x=0xF3A94883
7(x-y)+y= 0x33A94883 
3. 正常解解不开,就想到溢出,通过猜测高位的方式去遍历,10分钟内就能遍历完,发现无解。。。
4. 重新分析程序,发现存储缓存区溢出漏洞,可以自己调节堆栈,跳转到特定地址0x413131
因为这个地址只能是数字字母的ASCII十六进制数值,而且通过静态分析,看出0x413131这段代码开始出现了猫腻。。。

5. 然后程序就会跳转到0x413131执行,来到一片新“ 天地 ”

6. 这段代码开始就是真正的代码,但是加了花指令,好在不是很影响,直接单步分析即可
7. 单步分析,提取有用的代码


x = ecx = 38373635

y = ebx = 34333231

z = edx = 64636261

00413150    33C0            xor eax,eax				eax="56781234abcd11A."

00413184    A3 34B04100     mov dword ptr ds:[0x41B034]			eax	标志位清0

004131BA    58              pop eax			38373635

004131EB    8BC8            mov ecx,eax			ecx = 38373635

0041321F    58              pop eax					eax = 34333231

00413254    8BD8            mov ebx,eax			ebx = 34333231

00413289    58              pop eax         eax = 64636261

004132B5    8BD0            mov edx,eax			edx = 64636261

004132AD    8BD0            mov edx,eax	

004132E2    8BC1            mov eax,ecx			38373635 

00413316    2BC3            sub eax,ebx			04040404

00413349    C1E0 02         shl eax,0x2			10101010

00413380    03C1            add eax,ecx			48474645

004133B5    03C2            add eax,edx			ACAAA8A6

004133E9    2D E217F9EA     sub eax,0xEAF917E2		判断1

、、、判断1如果不符合的话

00413B1E    58              pop eax       00413131

00413B4E    35 0E210100     xor eax,0x1210E		0040103F  回到bad 提示

00413B83    3305 34B04100   xor eax,dword ptr ds:[0x41B034]

00413BBB  ^\FFE0            jmp eax                                                      ; ctf2017_.0040103F

、、、强制修改eax = EAF917E2,继续执行

00413455    03C1            add eax,ecx			38373635

00413489    2BC3            sub eax,ebx			04040404

004134BF    8BD8            mov ebx,eax			04040404

004134F3    D1E0            shl eax,1				08080808

00413525    03C3            add eax,ebx			0C0C0C0C

00413559    03C1            add eax,ecx			44434241

0041358F    8BC8            mov ecx,eax			44434241

004135C3    03C2            add eax,edx			A8A6A4A2

004135F7    2D C808F5E8     sub eax,0xE8F508C8		判断2

、、、判断2如果不符合的话,(如果小于这个数字)

00413B1E    58              pop eax                                  00413131

00413B4E    35 0E210100     xor eax,0x1210E

00413B83    3305 34B04100   xor eax,dword ptr ds:[0x41B034]

00413BBB  ^\FFE0            jmp eax                                  ; ctf2017_.0040103F

、、、强制修改 eax = E8F508C8,继续执行

00413665    8BC1            mov eax,ecx			44434241

0041365D    8BC1            mov eax,ecx

004136A7    2BC2            sub eax,edx			- 64636261=DFDFDFE0

004136D8    2D 683C0A0C     sub eax,0xC0A3C68			判断3

、、、判断3如果不等的话

00413B1E    58              pop eax                                  ; ctf2017_.00413131

、、、判断3强制修改后,继续执行

00413747    58              pop eax                                 ; ctf2017_.00413131

00413777    35 01810000     xor eax,0x8101			0041B030

004137A9    8BF8            mov edi,eax                             ; ctf2017_.0041B030

004137E2    33C0            xor eax,eax                             ; ctf2017_.0041B030

00413817    AB              stos dword ptr es:[edi]

00413830    E8 0C000000     call ctf2017_.00413841

0041385C    58              pop eax                                 ; ctf2017_.00413835	、、、这个地址就是call 00413841下面的call

0041388E    50              push eax                                ; ctf2017_.00413835

004138BA    8BF8            mov edi,eax                             ; ctf2017_.00413835

004138B2    8BF8            mov edi,eax                             ; ctf2017_.00413835

004138E6    68 6909004E     push 0x4E000969

0041391F    58              pop eax                             4E000969

00413950    33C2            xor eax,edx			xor 64636261 = 2A636B08,

00413983    AB              stos dword ptr es:[edi]	,将eax中的4字节数据,写入到 413835地址中,

004139B5    35 3E0A0100     xor eax,0x10A3E		2A626136

004139EB    AB              stos dword ptr es:[edi]	,将eax中的4字节数据,写入到 413839中,

00413A1C    33C3            xor eax,ebx		xor 04040404 = 2E666532

00413A4D    35 141E5122     xor eax,0x22511E14				——22706A16

、、、、强制让eax = 22511E14

00413A82    AB              stos dword ptr es:[edi],将eax中的4字节数据,写入到 41383D中,

00413AB6    35 2D646100     xor eax,0x61642D	 判断4		——217402

00413BBB  - FFE0            jmp eax

最终结果,要让eax = 0040102F (因为这里是跳转到成功提示的push)      

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功