首页
社区
课程
招聘
让crakcme成为注册机
发表于: 2006-9-19 15:02 6284

让crakcme成为注册机

2006-9-19 15:02
6284

【文章标题】: 让crakcme成为注册机
【文章作者】: 醉天使
【软件名称】: muckis's crakcme #1
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: name,serial
【编写语言】: VC++
【使用工具】: OD
【操作平台】: win2k
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  这个crakcme已经由bxm分析过了,算法分析很是详尽,我就不再?嗦了,见http://bbs.pediy.com/showthread.php?threadid=31757这篇文章;
  
  
  
  任务:让crackme自动弹出正确的注册码或把正确的注册码写入编辑框;
  
  废话不说,进入我们菜鸟的修炼历程:
  
  
  1、这个crackme是明码比较的,内存中有程序计算出来的注册码,我们只需要在程序中加入几行代码,在注册码被销毁前用Messagebox弹出,或用SetDlgItemText、setWindowText等函数写到编辑框即可;
  
  
  2、很庆幸,程序中有MessageBox函数,也有SetWindowText函数
  
  
  地址       区段       类型    (  名称                                    注释

  004302D4   .idata     输入    (    USER32.MessageBoxA

  004302D8   .idata     输入    (    USER32.SetWindowTextA

  
  我们只要call一下函数的地址,就可以实现函数的调用了,如call 004302D8就是调用SetWindowTextA;
  
  
  3、我们跟踪一下crackme,看看注册码在什么地方计算完成:
  
  0040155C  |> \6A 0A         PUSH 0A
  0040155E  |.  8D4D E0       LEA ECX,DWORD PTR SS:[EBP-20]
  00401561  |.  51            PUSH ECX
  00401562  |.  8D55 C0       LEA EDX,DWORD PTR SS:[EBP-40]
  00401565  |.  52            PUSH EDX
  00401566  |.  E8 B3FAFFFF   CALL crackme1.0040101E
  0040156B  |.  83C4 04       ADD ESP,4
  0040156E  |.  50            PUSH EAX                                 ; |Arg1
  0040156F  |.  E8 FC9F0000   CALL crackme1.0040B570                   ; \crackme1.0040B570
  
  OK,经过0040156F  |.  E8 FC9F0000   CALL crackme1.0040B570这个call后,正确的注册码已经出现在我们眼前了:0012fb50处,我们用d 0012fb50察看一下;
  
  
  4、希望离我们越来越近了,哦,还是以SetWindowText为例来探索吧!
  
  还是看看函数的定义吧:
  
  BOOL SetWindowText(
      HWND hWnd,        // handle of window or control
      LPCTSTR lpString         // address of string
     );
  
  有2个参数,一个是编辑框的句柄,一个是我们想写入的内容,转化为asm应该是:
  
  push 写入的内容编辑框句柄
  push 编辑框句柄
  call SetWindowText函数地址
  
  注意api中的参数在asm中刚好是反着入栈的;
  
  问题又来了,编辑框的句柄如何获得了?我们还是到OD中看看吧:
  
  0040158A  |.  68 1CA04200   PUSH crackme1.0042A01C                   ; /now make a keygen!
  0040158F  |.  8B4D 9C       MOV ECX,DWORD PTR SS:[EBP-64]            ; |
  00401592  |.  51            PUSH ECX                                 ; |hWnd
  00401593  |.  FF15 D8024300 CALL DWORD PTR DS:[<&USER32.SetWindowTex>; \SetWindowTextA
  
  yeah,push ecx就是句柄参数了,ecx来自MOV ECX,DWORD PTR SS:[EBP-64],这是只要EBP的值不发生改变,我们可以照葫芦画瓢了
  
  
  
  5、该找块空白的地方写入我们的代码了,在OD中鼠标往下拉吧,停停,这里是都是DB 00,正是程序的空白区,就让我们的代码在这里安家吧
  
  
  我们要让程序暂时中断去干我们要求它干的事,然后再返回去继续自己的流程,我们用jmp让它跳转,然后用jmp跳回来;还是回OD看看吧:
  
  0040156E  |.  50            PUSH EAX                                 ; |Arg1
  0040156F  |.  E8 FC9F0000   CALL crackme1.0040B570                   ; \crackme1.0040B570
  00401574  |.  83C4 0C       ADD ESP,0C
  00401577  |.  50            PUSH EAX
  00401578  |.  8D45 A0       LEA EAX,DWORD PTR SS:[EBP-60]
  0040157B  |.  50            PUSH EAX
  0040157C      E8 1F1F0000   CALL crackme1.004034A0
  
  
  0040157C      E8 1F1F0000   CALL crackme1.004034A0这是一个理想的地方,和jmp ********一样是10个字节,我们就从CALL crackme1.004034A0开刀
  
  0040156E  |.  50            PUSH EAX                                 ; |Arg1
  0040156F  |.  E8 FC9F0000   CALL crackme1.0040B570                   ; \crackme1.0040B570
  00401574  |.  83C4 0C       ADD ESP,0C
  00401577  |.  50            PUSH EAX
  00401578  |.  8D45 A0       LEA EAX,DWORD PTR SS:[EBP-60]
  0040157B  |.  50            PUSH EAX
  0040157C   . /E9 7F7C0100   JMP crackme1.00419200
  
  注意修改前一定要把CALL crackme1.004034A0记录下来,后面我们还要恢复它
  
  
  
  我们转到00419200,在DB 00上双击,写入如下代码:
  
  pushad                         ;和popad配对使用,保护我们的作案现场
  PUSH 12FB50                    ;正确注册码存放地点
  MOV ECX,DWORD PTR SS:[EBP-64]  ;获得编辑框句柄
  PUSH ECX                       ;句柄入栈
  CALL DWORD PTR DS:[4302D8]     ;调用SetWindowTextA函数
  POPAD
  CALL 004034A0                  ;恢复前面被我们改写了的代码
  JMP 00401581                   ;回到我们跳出来的地方,继续程序的流程;
  
  
  
  6、好了,我们要将成果保存下来了,在我们改写或添加的代码上(会自动变成红色的)点右键,复制到可执行文件--所有修改--全部复制,这时会弹出一个窗口,我们直接关闭它,会提醒我们是否保存?当然选是了,换个名字保存吧;
  
  
  来看看我们的成果吧,输入Unlock、987654321,check it,yeah,serial编辑框的内容变成了25290749,在点击check it,Now make a keygen!
  
  Good,这正是我们想要的。

  7、用MessageBox弹出注册码的方法就留给大家练习吧!
  

附件中是我修改过的,原件请到http://bbs.pediy.com/showthread.php?threadid=31757来下载
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年09月19日 14:45:30


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
合理的顶一下,不错,符合我的学习目标,支持
2006-9-19 15:14
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
不错.学习一下!!!
2006-9-19 15:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这样还是菜鸟水平呀,唉,,,我真的可是菜菜鸟
2006-9-20 20:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哎,啥也不说了,学习
2006-9-24 17:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 星夜明宇 发布
哎,啥也不说了,学习


都是高手啊!
2006-9-25 19:27
0
游客
登录 | 注册 方可回帖
返回
//