whyida 发表于 2017-10-25 15:11

一个简单ctf的逆向。

本帖最后由 whyida 于 2017-10-25 20:18 编辑

原帖地址:
https://www.52pojie.cn/thread-654545-1-1.html

查壳为upx ,直接上脱壳机脱壳,ida载入
.text:00401460 ; int __cdecl main(int argc, const char **argv, const char **envp)
.text:00401460               public _main
.text:00401460 _main         proc near               ; CODE XREF: sub_4011B0+D0p
.text:00401460
.text:00401460 Str             = dword ptr -30h
.text:00401460 var_2C          = dword ptr -2Ch
.text:00401460 var_1A          = byte ptr -1Ah
.text:00401460 var_19          = byte ptr -19h
.text:00401460 var_18          = byte ptr -18h
.text:00401460 var_17          = byte ptr -17h
.text:00401460 var_16          = byte ptr -16h
.text:00401460 var_15          = byte ptr -15h
.text:00401460 var_14          = byte ptr -14h
.text:00401460 var_13          = byte ptr -13h
.text:00401460 var_12          = byte ptr -12h
.text:00401460 var_11          = byte ptr -11h
.text:00401460 var_10          = byte ptr -10h
.text:00401460 var_F         = byte ptr -0Fh
.text:00401460 var_E         = byte ptr -0Eh
.text:00401460 var_D         = byte ptr -0Dh
.text:00401460 var_C         = byte ptr -0Ch
.text:00401460 var_B         = byte ptr -0Bh
.text:00401460 var_A         = byte ptr -0Ah
.text:00401460 var_9         = byte ptr -9
.text:00401460 var_8         = dword ptr -8
.text:00401460 var_4         = dword ptr -4
.text:00401460 argv            = dword ptr0Ch
.text:00401460 envp            = dword ptr10h
.text:00401460
.text:00401460               push    ebp
.text:00401461               mov   ebp, esp
.text:00401463               and   esp, 0FFFFFFF0h
.text:00401466               sub   esp, 30h
.text:00401469               call    ___main
.text:0040146E               mov   , offset Str ; "please input a number:"
.text:00401475               call    _puts
.text:0040147A               lea   eax,
.text:0040147E               mov   , eax
.text:00401482               mov   , offset Format ; "%d"
.text:00401489               call    _scanf
.text:0040148E               mov   , 83h
.text:00401493               mov   , 7Ch
.text:00401498               mov   , 86h
.text:0040149D               mov   , 7Fh
.text:004014A2               mov   , 6Ah
.text:004014A7               mov   , 8Fh
.text:004014AC               mov   , 93h
.text:004014B1               mov   , 8Ah
.text:004014B6               mov   , 82h
.text:004014BB               mov   , 77h
.text:004014C0               mov   , 6Ch
.text:004014C5               mov   , 7Fh
.text:004014CA               mov   , 86h
.text:004014CF               mov   , 74h
.text:004014D4               mov   , 7Ah
.text:004014D9               mov   , 66h
.text:004014DE               mov   , 9Ah
.text:004014E3               mov   , 5Bh
.text:004014E8               mov   , 0
.text:004014F0               jmp   short loc_40151B
.text:004014F2 ; ---------------------------------------------------------------------------
.text:004014F2
.text:004014F2 loc_4014F2:                           ; CODE XREF: _main+C0j
.text:004014F2               mov   edx,
.text:004014F6               lea   ecx,
.text:004014FA               mov   eax,
.text:004014FE               add   eax, ecx
.text:00401500               movzx   eax, byte ptr
.text:00401503               movsx   eax, al
.text:00401506               sub   edx, eax
.text:00401508               mov   eax, edx
.text:0040150A               sub   eax,
.text:0040150E               mov   , eax ; Ch
.text:00401511               call    _putchar
.text:00401516               add   , 1
.text:0040151B
.text:0040151B loc_40151B:                           ; CODE XREF: _main+90j
.text:0040151B               cmp   , 11h
.text:00401520               jle   short loc_4014F2
.text:00401522               mov   , 0Ah ; Ch
.text:00401529               call    _putchar
.text:0040152E               mov   , offset aIfYouCanTSeeFl ; "if you can't see flag,the number is wro"...
.text:00401535               call    _puts
.text:0040153A               nop
.text:0040153B               leave
.text:0040153C               retn
.text:0040153C _main         endp
F5 得到伪c 代码:
char v4; // @1
char v5; // @1
char v6; // @1
char v7; // @1
char v8; // @1
char v9; // @1
char v10; // @1
char v11; // @1
char v12; // @1
char v13; // @1
char v14; // @1
char v15; // @1
char v16; // @1
char v17; // @1
char v18; // @1
char v19; // @1
char v20; // @1
char v21; // @1
int v22; // @1
int i; // @1

__main();
puts("please input a number:");
scanf("%d", &v22);
v4 = -125;
v5 = 124;
v6 = -122;
v7 = 127;
v8 = 106;
v9 = -113;
v10 = -109;
v11 = -118;
v12 = -126;
v13 = 119;
v14 = 108;
v15 = 127;
v16 = -122;
v17 = 116;
v18 = 122;
v19 = 102;
v20 = -102;
v21 = 91;
for ( i = 0; i <= 17; ++i )
    putchar(v22 - *(&v4 + i) - i);
putchar(10);
return puts("if you can't see flag,the number is wrong!!!");
}
flag 第一个字母位“f” asII 码为0x66 ,十进制 102.也就是
x-(-125)=102,x=-23
用c描述就是这样:
#include <stdio.h>

void main()
{      
      int i;
      int s[]={-125,124,-122,127,106,-113,-109,-118,-126,119,108,127,-122,116,122,102,-102,91};
      for(i=0;i<=17;i++)
      {
                putchar(-23- (s【i】)-i);
               
      }
      putchar(10);
}

Flacco 发表于 2017-10-26 19:18

想请教一下这个UPX壳该怎么脱。我OD载入后直接是0040C350这个jmp语句,跳到0040C36Cretn语句(return to 77179930)。如果我在retn语句的下面一行F4,OD就处于running状态等待我输入字符,没办法断下。我直接用二次内存镜像法也不行,所以想请教一下,谢谢。
图片见附件

guidao 发表于 2017-12-4 21:06

我用od脱完壳后,程序运行没问题,但再用od载入时,发现od停下的点还是和之前一样(代码变了),但exeinfo显示的entry point与我找的oep一样。转到我找的oep发现也被解压了,这是怎么回事,是oep找错了吗?求大佬指点下

a774733519 发表于 2017-10-25 15:21

你好楼主,脱脱一个绝地的辅助吗?

Ronpa 发表于 2017-10-25 15:21

啊 这题啊 蓝盾CTF里很基础的签到题

whyida 发表于 2017-10-25 15:23

a774733519 发表于 2017-10-25 15:21
你好楼主,脱脱一个绝地的辅助吗?

没玩过。

whyida 发表于 2017-10-25 15:24

Ronpa 发表于 2017-10-25 15:21
啊 这题啊 蓝盾CTF里很基础的签到题

是很简单。

xiaofengzi 发表于 2017-10-25 19:12

本帖最后由 xiaofengzi 于 2017-10-25 19:25 编辑

我照着这个实践了2个小时,看看前面的发言,发现自己还是太菜了{:1_937:}
另外最后c语言那里s应该为是s [ i ]

lanlana 发表于 2017-10-25 19:28

感谢老铁的思路分享{:1_919:}

坛哥哥 发表于 2017-10-25 20:03

感觉一道小题解起来都好久哦。。。 同新手路过{:1_937:} 一起加油!

whyida 发表于 2017-10-25 20:15

xiaofengzi 发表于 2017-10-25 19:12
我照着这个实践了2个小时,看看前面的发言,发现自己还是太菜了
另外最后c语言那里s应该为是s [...

论坛会吃代码。你用代码编辑框重发一遍试试看。

whyida 发表于 2017-10-25 20:39

lanlana 发表于 2017-10-25 19:28
感谢老铁的思路分享

再找几个练练手。
页: [1] 2 3 4
查看完整版本: 一个简单ctf的逆向。