首页
社区
课程
招聘
[原创]IDA+OD双剑合璧=逆向无敌
发表于: 2015-12-12 22:25 44094

[原创]IDA+OD双剑合璧=逆向无敌

2015-12-12 22:25
44094

我这一周学<软件逆向>是薛老师讲课, 大多挺深,我就列出一个典型的吧。 

准备工具: ollydbg  ida   vs2012  

---------------------------------
我们先把目标程序winasm_0.exe拖入peid 
主界面

那我们去输入表看看


也好像没什么特别值得关注的。

、那好 简单测试下程序   看有什么状况发生 

看 弹出对话框 那我们该想到什么?API断点!messagebox相关!

不急我们把它拖入OD  直接ctrl+A分析
入口点:

习惯性的我把它上下一翻、发现:

这不是我们要找的字符串吗?(
PS:
如果我没翻到 步骤应该会是:

CPU Disasm
地址        十六进制数据            指令                                       Profile  Comments
    获取输入内容
00401066  |.  E8 BF000000   CALL <JMP.&USER32.GetDlgItemTextA>       ;           \USER32.GetDlgItemTextA
0040106B      A3 13114000   MOV DWORD PTR DS:[401113],EAX            ;           MOV DWORD PTR DS:[401113],EAX
比较eax
00401070  |.  83F8 05       CMP EAX,5                                ;
00401073  |.  75 13         JNE SHORT 00401088                       ;
比较 fubar?
00401075  |.  BE 2A334000   MOV ESI,OFFSET 0040332A                  ;
0040107A  |.  BF 41304000   MOV EDI,OFFSET 00403041                  ;           ASCII "fubar"
0040107F  |.  B9 06000000   MOV ECX,6                                ;
00401084  |.  F3:A6         REPE CMPS BYTE PTR DS:[ESI],BYTE PTR ES: ;           
看ZF标志以决定转移与否
00401086  |.  74 19         JE SHORT 004010A1                        ;
00401088  |>  6A 00         PUSH 0                                   ;           /Type = MB_OK|MB_DEFBUTTON1|MB_APPLMODAL
0040108A  |.  68 1F334000   PUSH OFFSET 0040331F                     ;           |Caption = " try again"
0040108F  |.  68 0F334000   PUSH OFFSET 0040330F                     ;           |Text = "no, not really."
00401094  |.  6A 00         PUSH 0                                   ;           |hOwner = NULL
00401096  |.  E8 95000000   CALL <JMP.&USER32.MessageBoxA>           ;           \USER32.MessageBoxA
0040109B  |.  33C0          XOR EAX,EAX                              ;
0040109D  |.  C9            LEAVE                                    ;
0040109E  |.  C2 1000       RETN 10                                  ;
CPU Disasm
地址        十六进制数据            指令                                       Profile  Comments
0040106B      A3 13114000   MOV DWORD PTR DS:[401113],EAX            ;           MOV DWORD PTR DS:[401113],EAX
CPU Disasm
地址        十六进制数据            指令                                       Profile  Comments
eax与5相比较 
00401070    83F8 05         CMP EAX,5                                ;
判断ZF标志位   若zf=0  跳转至地址“00401088”  显然是错的
00401073    75 13           JNE SHORT 00401088                       ;
00401075    BE 2A334000     MOV ESI,OFFSET 0040332A                  ;
0040107A    BF 41304000     MOV EDI,OFFSET 00403041                  ;           ASCII "fubar"
ecx 一般做循环比较次数 6? 等等 与上面那个5有什么关系? 字符串自带反斜杠0 如果去掉呢?就是长度5 ! 我们再往下分析
0040107F    B9 06000000     MOV ECX,6                                ;
esi与字符串“fubar”相比较   
00401084    F3:A6           REPE CMPS BYTE PTR DS:[ESI],BYTE PTR ES: ;
JE ? 结果很显然了
00401086    74 19           JE SHORT 004010A1                        ;
00401088    6A 00           PUSH 0                                   ;
0040108A    68 1F334000     PUSH OFFSET 0040331F                     ;           ASCII " try again"
0040108F    68 0F334000     PUSH OFFSET 0040330F                     ;           ASCII "no, not really."
00401094    6A 00           PUSH 0                                   ;
00401096    E8 95000000     CALL <JMP.&USER32.MessageBoxA>           ;           跳转至 USER32.MessageBoxA
.data:0040334A TopLevelExceptionFilter db ',0        ; DATA XREF: DialogFunc+E1o
.data:0040334E                 push    esi
long   __stdcall   callback(_EXCEPTION_POINTERS*   pexcp)   
{   
   
  //异常
  printf("%p\n",pexcp->ExceptionRecord->ExceptionCode);  
  printf("%p\n",pexcp->ContextRecord->Esi);   //ESI辅助分析
  getchar();
  return   EXCEPTION_EXECUTE_HANDLER;   
}

int _tmain(int argc, _TCHAR* argv[])
{
  SetUnhandledExceptionFilter(callback); 
  unsigned ueax,uebx,uecx,uedx,uebp;
  __asm  //使用__asm进行内联汇编
  {
    //使用mov指令将eax寄存器的内容保存到ueax变量
    mov ueax, eax  
      mov uebx, ebx
      mov uecx, ecx
      mov uedx, edx
      mov uebp,ebp
  }
  printf("eax=%x\tebx=%x\tecx=%x\tedx=%x\nuebp=%x\n", ueax, uebx, uecx, uedx,uebp);
  //设置异常
  int *f =0;
  *f = 9;
  system("pause");
  return 0;
}
ta:0040334A                 enter   0, 0
.data:0040334E                 push    esi        ;将结构体压入堆栈
.data:0040334F                 mov     esi, [ebp+arg_0] ; 取结构体EXCEPTION_POINTERS pexcp
.data:00403352                 lodsd                   ; 取pexcp->ExceptionRecord  此时esi+4
.data:00403353                 mov     eax, [eax]      ; 将pexcp->ExceptionRecord->ExceptionCode内容给eax
.data:00403353                                         ; 即EAX= C0000005 从demo得到
.data:00403355                 and     eax, 0DEADFFh   ; EAX=5
.data:0040335A                 shl     eax, 5          ; EAX=A0
.data:0040335D                 mov     ebx, eax        ; EBX=A0
.data:0040335F                 lea     eax, [eax+402FAEh] ; 40304E  即 magic
.data:00403365                 mov     esi, [esi]      ; 取 pexcp->ContextRecord
.data:00403367                 mov     [esi+9Ch], eax  ; 取pexcp->ContextRecord+9c 即pexcp->ContextRecord->edi
.data:0040336D                 add     eax, 2DCh       ; eax=2ac
.data:00403372                 mov     [ebx+esi], eax  ; pexcp->ContextRecord->esi=2ac
.data:00403375                 mov     eax, 400FDFh    ; eax=400fdf
.data:0040337A                 add     eax, ebx        ; eax=40107f
.data:0040337C                 mov     [esi+0B8h], eax ;  pexcp->ContextRecord->esi+b8
.data:0040337C                                         ; 即  pexcp->ContextRecord->eip=40107f 即做完异常处理函数后跳转到地址40107f 
.data:00403382                 xor     eax, eax
.data:00403384                 dec     eax
.data:00403385                 pop     esi
CPU Disasm
地址        十六进制数据            指令                                       Profile  Comments
00401073   /75 13           JNE SHORT 00401088                       ;
00401075   |BE 2A334000     MOV ESI,OFFSET 0040332A                  ;
0040107A   |BF 41304000     MOV EDI,OFFSET 00403041                  ;           ASCII "fubar"
[B][COLOR="DarkRed"]0040107F   |B9 06000000     MOV ECX,6                                ;
00401084   |F3:A6           REPE CMPS BYTE PTR DS:[ESI],BYTE PTR ES: ;
00401086   |74 19           JE SHORT 004010A1                        ;[/COLOR][/B]
00401088   \6A 00           PUSH 0                                   ;
0040108A    68 1F334000     PUSH OFFSET 0040331F                     ;           ASCII " try again"
0040108F    68 0F334000     PUSH OFFSET 0040330F                     ;           ASCII "no, not really."
00401094    6A 00           PUSH 0                                   ;
00401096    E8 95000000     CALL <JMP.&USER32.MessageBoxA>           ;           跳转至 USER32.MessageBoxA
0040109B    33C0            XOR EAX,EAX                              ;
0040109D    C9              LEAVE                                    ;
0040109E    C2 1000         RETN 10                                  ;
004010A1    68 B90B0000     PUSH 0BB9                                ;
004010A6    FF75 08         PUSH DWORD PTR SS:[EBP+8]                ;
004010A9    E8 76000000     CALL <JMP.&USER32.GetDlgItem>            ;           跳转至 USER32.GetDlgItem
CPU Disasm
地址        十六进制数据            指令                                       Profile  Comments
循环比较5次 (忽视反斜杠0)
0040107F    B9 06000000     MOV ECX,6                                ;
与字符串magic相比较  我们刚刚不是分析出来了么?
00401084    F3:A6           REPE CMPS BYTE PTR DS:[ESI],BYTE PTR ES: ;
跳转至地址“004010A1”
00401086    74 19           JE SHORT 004010A1                        ;

  • 搜索字符串
  • 下API断点
  • 其它...

  • 左键单击选中-右键-编辑-填充为NOP(有些OD可以直接DEL)  
  • 左键单击选中-右键-复制所有修改到可执行文件-”忽视所有警告“
  • 在所弹出窗口-右键-保存文件-确定-重名为”1“(保存在桌面)

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 5
支持
分享
最新回复 (58)
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
2
又挂图 修复ing...
2015-12-12 22:26
0
雪    币: 191
活跃值: (848)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2015-12-12 22:40
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
4
好走了 这回真走了明天再看有无BUG...
2015-12-12 22:41
0
雪    币: 6524
活跃值: (4316)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
5
早进化到VM时代了,搞不定VM都是扯~
2015-12-12 22:46
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
恩,简单明了,图文并茂很不错,支持下。
2015-12-13 00:00
0
雪    币: 6
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
赞同,基本逆向,现在用程序都能搞定了,人工搞他用处不大。
你也知道一些插件 比如F5,直接搞定,

现在逆向也需要一些高级算法了,
2015-12-13 08:22
0
雪    币: 1556
活跃值: (878)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
8
鼓励一下:)
希望你能坚持,到最后能做理论性的研究.
2015-12-13 09:02
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
9
感谢~我会努力的
2015-12-13 10:22
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
6666
2015-12-13 11:12
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
大牛满天飞,羡慕死小白了。都是IDA是神器,可是哪里有IDA的教程啊,根本不会用那神器咋办啊?
2015-12-13 11:12
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
12
书籍:《IDA Pro权威指南》,看雪应该有相关的初级教程  你搜搜
没有的话 我有时间来填补这块空白。
多百度下
2015-12-13 11:15
0
雪    币: 39
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
貌似现在都在搞移动安全,哎,真不知道pc这边还应不应该学
2015-12-13 12:15
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
14
仁者见仁智者见智 看个人兴趣爱好吧
2015-12-13 12:31
0
雪    币: 33
活跃值: (244)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
字符串magic哪来的?
2015-12-13 13:56
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
16
你耐心看下ida分析那块。
2015-12-13 14:11
0
雪    币: 99
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
支持lz。再接再厉!!!
2015-12-13 14:20
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
18
感谢支持~
2015-12-13 14:28
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢楼主分享。
2015-12-13 15:35
0
雪    币: 438
活跃值: (228)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
20
楼主是在读吗?
2015-12-13 16:41
0
雪    币: 49
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
写的不错小石,学习要再接再厉啊,要是除了15PB教授的知识再能加进一些自己的观点就更好了
2015-12-13 16:58
0
雪    币: 12321
活跃值: (5078)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
速度来学了,多谢楼主
2015-12-13 23:36
0
雪    币: 5573
活跃值: (2153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
有点不懂,楼主到底要讲什么
2015-12-14 08:04
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
24
逆向 OD爆破 ida分析算法 也是新手吗?
2015-12-14 08:06
0
雪    币: 274
活跃值: (30)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
此crack思路亮点:seh代替messagebox,防止跟踪,对初学者会有难度
2015-12-14 10:00
0
游客
登录 | 注册 方可回帖
返回
//