首页
社区
课程
招聘
求帮忙解释教我一小程序破解
发表于: 2012-4-24 23:03 5553

求帮忙解释教我一小程序破解

2012-4-24 23:03
5553
这是我第一次发帖。惭愧~菜鸟不如!看了很长时间逆向OD还是不得其法,本人基础差VC还没学好,在这里献丑了,我想兼顾破解学,可也找不到没壳的小程序,于是自己编了个垃圾注册程序Release版本,想破解一下,可是就是不像看雪基础OD说的,点击“查找”-“所有参考文本字串”,就二行找不到字符或文字信息参考,函数使用的AfxMessageBox也找不到,一定是方法不对,请教一下,哪位好心人能帮帮我,教教我啊!实在研究不了,哎~哪怕告诉我方法也可以啊!

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 55
活跃值: (929)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
004010F7   .  6A 00         push 0x0
004010F9   .  3D 91050000   cmp eax,0x591
004010FE   .  6A 00         push 0x0
00401100   .  75 2F         jnz X注册窗口.00401131
00401102   .  68 2C304000   push 注册窗口.0040302C                       ;  恭喜!验证码正确。

搜索下字符串就行了,终于能找到一个简单的了,
密码就是0x591,换算成10进制就是1425
2012-4-24 23:11
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
试着破解了一下,确实很没难度。。
1.开OD,右键“超级字串参考”(一般来说OD都有这个插件),
2.选择“口令错误”,Enter跟随,
3.OD往上拉,00401100处的指令: JNZ SHORT 注册窗口.00401131,将其nop掉即可。当然,最好
  改成 jmp 401102,因为“JNZ SHORT 注册窗口.00401131”是跳转到“口令错误”这个子窗口的。

00401100   /75 2F           JNZ SHORT 注册窗口.00401131                     //把此处nop掉
00401102   |68 2C304000     PUSH 注册窗口.0040302C                       ; 恭喜!验证码正确。
00401107   |E8 F4040000     CALL <JMP.&MFC42.#1200>
0040110C   |8D4C24 00       LEA ECX,DWORD PTR SS:[ESP]
00401110   |C74424 70 FFFFF>MOV DWORD PTR SS:[ESP+70],-1
00401118   |E8 DD040000     CALL <JMP.&MFC42.#641>
0040111D   |B8 01000000     MOV EAX,1
00401122   |8B4C24 68       MOV ECX,DWORD PTR SS:[ESP+68]
00401126   |64:890D 0000000>MOV DWORD PTR FS:[0],ECX
0040112D   |83C4 74         ADD ESP,74
00401130   |C3              RETN
00401131   \68 20304000     PUSH 注册窗口.00403020                       ; 口令错误!
00401136    E8 C5040000     CALL <JMP.&MFC42.#1200>
0040113B    8D4C24 00       LEA ECX,DWORD PTR SS:[ESP]               ; (Initial CPU selection)
2012-4-25 00:14
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对了,楼主能把VC源码发上来么,我VC也很差。。
不懂可再问,我还没转正。我可是急需Kx的啊。。
2012-4-25 00:18
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
5
用IDA F5一下看到这些很间单sub_4011D0(0)是算法CALL下面是判断
成功。。。。sub_4011D0算得结果是 if ( v2 == 1425 )就成功
signed int __cdecl sub_4010B0()
{
  char v1; // [sp+0h] [bp-74h]@1
  int v2; // [sp+60h] [bp-14h]@2
  int v3; // [sp+70h] [bp-4h]@1

  AfxEnableControlContainer(0);
  sub_4011D0(0);
  v3 = 0;
  if ( CDialog__DoModal(&v1) == 1 )
  {
    if ( v2 == 1425 )
    {
      AfxMessageBox("恭喜!验证码正确。", 0, 0);
      v3 = -1;
      CDialog___CDialog(&v1);
      return 1;
    }
    AfxMessageBox("口令错误!", 0, 0);
  }
  v3 = -1;
  CDialog___CDialog(&v1);
  return 0;
}

下面就是 sub_4011D0的算法过程

void *__thiscall sub_4011D0(void *this, int a2)
{
  void *v3; // esi@1
  HINSTANCE v4; // eax@1

  v3 = this;
  CDialog__CDialog(102, a2);
  *(_DWORD *)v3 = &off_402428;
  *((_DWORD *)v3 + 24) = 123;
  AfxGetModuleState();
  v4 = AfxFindResourceHandle((const char *)0x80, (const char *)0xE);
  *((_DWORD *)v3 + 25) = LoadIconA(v4, (LPCSTR)0x80);
  return v3;
}
2012-4-25 07:24
0
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
热心肠的人不少
2012-4-25 07:35
0
雪    币: 2033
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
终于有点小进步了~~感谢各位好心人帮忙!各位答得都很好,只能给最需要的那位了!
特别感谢5楼wangweilll  还用IDA帮忙破解讲的很详细,可惜我还没有学到IDA(较复杂),OD还没学好,呵呵~~惭愧啊!
再次感谢各位!
2012-4-25 10:48
0
雪    币: 2033
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
至于代码,回4楼,我已发E-mail过去,请接受,在这里卖弄实在献丑~~其实都是按教科书打的,没什么可技术!如果您想和我一起学,可以加个好友,大家一同进步哦。
再次感谢5楼,没能选您,实在抱歉!我的Kx也不多!希望不久能达到您的水平!

PS:现在的社会太现实,到处都要钱,就连虚拟世界也是离不开钱呐!
2012-4-25 10:57
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
9
无所谓了!!!!!!!!
虚拟币也没什用只要可以帮助兄弟就ok
2012-4-25 13:06
0
雪    币: 55
活跃值: (929)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
选的是我吗?我也只能破解下这种简单的了,希望楼主以后多出点简单的,给我们菜鸟点信心
2012-4-25 13:08
0
雪    币: 122
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
选的是3#。。。大哥
2012-4-27 15:32
0
游客
登录 | 注册 方可回帖
返回
//