吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5274|回复: 18
收起左侧

[原创] 160 个 CrackME 之 010 菜鸟练手

  [复制链接]
hjm666 发表于 2018-5-2 11:49
这是在吾爱打算发关于破解的第二个帖子········ 第一个帖子在排版上腹死胎中····(排版了大半天就要完了,然后小手一抖关了发帖网页,心态炸了就此作罢了,第一个帖子卒!
个人感觉吾爱的发帖排版对我特别不友好···也可能我排版菜····


废话不多说,先上程序!
1.png

程序界面很简单,只有一个OK键,机制是验证你输入的 Key ,我们点下OK后


2.png

弹窗的大概意思就是输入的key 输入错误了,等云云,我们再查下壳


3.png

无壳表示一切都很爽!! 接下来可以OD上手了


在OD中找到程序的你想要的关键事件中无疑是很重要的,有时候这个步骤也是很艰难,很让人头疼的,有很多办法找到关键事件的地址。
但我个人在学习的一步一步中来说,相对来说我比较喜欢直接用反编译软件下手直接找到事件的地址,办法很多,随个人喜好。
   我用的是VBExplorer
4.png

VBExplorer找到了按钮事件 ,也找到了OK按钮事件的地址 00401E20
OD中 直接照这个地址跳转过去断下断点   然后OD运行程序  ----》 程序主窗口跳出  -----》随便输入一串字符点下OK -------》OD停下在断点处
这证明我们刚刚断下的断点是没错的,我也就不一一上图了。接下来就轮到来好好分析一下这个事件了。
      第一次接触vb程序,才发现它的效率之低······ 好多对你没什么帮助的鬼代码,一开始我是一个一个call分析的,泥垢········日个香蕉吧啦···怎么这都多少个call啦!!! 一点有用的信息都没有虽然说破解要的就是耐心·····  我还是选择看看强大的OD在这个事件里分析出来的函数,度娘vb函数库搜索一下如:vbaLenVarrtcMidCharVar,_vbaVarTstEq   
[Asm] 纯文本查看 复制代码
00401E20   > \55            push ebp
00401E21   .  8BEC          mov ebp,esp
00401E23   .  83EC 0C       sub esp,0xC
00401E26   .  68 16104000   push <jmp.&MSVBVM50.__vbaExceptHandler>  ;  SE 处理程序安装
00401E2B   .  64:A1 0000000>mov eax,dword ptr fs:[0]
00401E31   .  50            push eax
00401E32   .  64:8925 00000>mov dword ptr fs:[0],esp
00401E39   .  81EC 10010000 sub esp,0x110
00401E3F   .  53            push ebx
00401E40   .  56            push esi
00401E41   .  57            push edi
00401E42   .  8B7D 08       mov edi,dword ptr ss:[ebp+0x8]           ;  Andréna.<模块入口点>
00401E45   .  8BC7          mov eax,edi
00401E47   .  83E7 FE       and edi,-0x2
00401E4A   .  8965 F4       mov dword ptr ss:[ebp-0xC],esp
00401E4D   .  83E0 01       and eax,0x1
00401E50   .  8B1F          mov ebx,dword ptr ds:[edi]
00401E52   .  C745 F8 00104>mov dword ptr ss:[ebp-0x8],Andréna.00401>
00401E59   .  57            push edi
00401E5A   .  8945 FC       mov dword ptr ss:[ebp-0x4],eax
00401E5D   .  897D 08       mov dword ptr ss:[ebp+0x8],edi
00401E60   .  FF53 04       call dword ptr ds:[ebx+0x4]
00401E63   .  33F6          xor esi,esi
00401E65   .  57            push edi
00401E66   .  8975 DC       mov dword ptr ss:[ebp-0x24],esi
00401E69   .  8975 CC       mov dword ptr ss:[ebp-0x34],esi
00401E6C   .  8975 BC       mov dword ptr ss:[ebp-0x44],esi
00401E6F   .  8975 AC       mov dword ptr ss:[ebp-0x54],esi
00401E72   .  8975 A8       mov dword ptr ss:[ebp-0x58],esi
00401E75   .  8975 A4       mov dword ptr ss:[ebp-0x5C],esi
00401E78   .  8975 94       mov dword ptr ss:[ebp-0x6C],esi
00401E7B   .  8975 84       mov dword ptr ss:[ebp-0x7C],esi
00401E7E   .  89B5 74FFFFFF mov dword ptr ss:[ebp-0x8C],esi
00401E84   .  89B5 64FFFFFF mov dword ptr ss:[ebp-0x9C],esi
00401E8A   .  89B5 54FFFFFF mov dword ptr ss:[ebp-0xAC],esi
00401E90   .  89B5 44FFFFFF mov dword ptr ss:[ebp-0xBC],esi
00401E96   .  89B5 14FFFFFF mov dword ptr ss:[ebp-0xEC],esi
00401E9C   .  89B5 FCFEFFFF mov dword ptr ss:[ebp-0x104],esi
00401EA2   .  89B5 ECFEFFFF mov dword ptr ss:[ebp-0x114],esi
00401EA8   .  FF93 00030000 call dword ptr ds:[ebx+0x300]
00401EAE   .  8D4D A4       lea ecx,dword ptr ss:[ebp-0x5C]
00401EB1   .  50            push eax
00401EB2   .  51            push ecx
00401EB3   .  FF15 20414000 call dword ptr ds:[<&MSVBVM50.__vbaObjSe>;  msvbvm50.__vbaObjSet
00401EB9   .  8BF8          mov edi,eax
00401EBB   .  8D45 A8       lea eax,dword ptr ss:[ebp-0x58]
00401EBE   .  50            push eax
00401EBF   .  57            push edi
00401EC0   .  8B17          mov edx,dword ptr ds:[edi]
00401EC2   .  FF92 A0000000 call dword ptr ds:[edx+0xA0]
00401EC8   .  3BC6          cmp eax,esi
00401ECA   .  7D 12         jge short Andréna.00401EDE
00401ECC   .  68 A0000000   push 0xA0
00401ED1   .  68 781A4000   push Andréna.00401A78
00401ED6   .  57            push edi
00401ED7   .  50            push eax
00401ED8   .  FF15 10414000 call dword ptr ds:[<&MSVBVM50.__vbaHresu>;  msvbvm50.__vbaHresultCheckObj
00401EDE   >  8B45 A8       mov eax,dword ptr ss:[ebp-0x58]
00401EE1   .  8975 A8       mov dword ptr ss:[ebp-0x58],esi
00401EE4   .  8B35 F8404000 mov esi,dword ptr ds:[<&MSVBVM50.__vbaVa>;  msvbvm50.__vbaVarMove
00401EEA   .  8D55 94       lea edx,dword ptr ss:[ebp-0x6C]
00401EED   .  8D4D BC       lea ecx,dword ptr ss:[ebp-0x44]
00401EF0   .  8945 9C       mov dword ptr ss:[ebp-0x64],eax
00401EF3   .  C745 94 08000>mov dword ptr ss:[ebp-0x6C],0x8
00401EFA   .  FFD6          call esi                                 ;  <&MSVBVM50.__vbaVarMove>
00401EFC   .  8D4D A4       lea ecx,dword ptr ss:[ebp-0x5C]
00401EFF   .  FF15 AC414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeO>;  msvbvm50.__vbaFreeObj
00401F05   .  B9 02000000   mov ecx,0x2
00401F0A   .  B8 01000000   mov eax,0x1
00401F0F   .  898D 54FFFFFF mov dword ptr ss:[ebp-0xAC],ecx
00401F15   .  898D 44FFFFFF mov dword ptr ss:[ebp-0xBC],ecx
00401F1B   .  8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC]
00401F21   .  8985 5CFFFFFF mov dword ptr ss:[ebp-0xA4],eax
00401F27   .  8985 4CFFFFFF mov dword ptr ss:[ebp-0xB4],eax
00401F2D   .  8D55 BC       lea edx,dword ptr ss:[ebp-0x44]
00401F30   .  51            push ecx                                 ; /Step8 = 0012FFB0
00401F31   .  8D45 94       lea eax,dword ptr ss:[ebp-0x6C]          ; |
00401F34   .  52            push edx                                 ; |/var18 = ntdll.KiFastSystemCallRet
00401F35   .  50            push eax                                 ; ||retBuffer8 = NULL
00401F36   .  FF15 14414000 call dword ptr ds:[<&MSVBVM50.__vbaLenVa>; |\_vbaLenVar  计算字符长度以及加上空格长度
00401F3C   .  8D8D 44FFFFFF lea ecx,dword ptr ss:[ebp-0xBC]          ; |
00401F42   .  50            push eax                                 ; |End8 = NULL
00401F43   .  8D95 ECFEFFFF lea edx,dword ptr ss:[ebp-0x114]         ; |
00401F49   .  51            push ecx                                 ; |Start8 = 0012FFB0
00401F4A   .  8D85 FCFEFFFF lea eax,dword ptr ss:[ebp-0x104]         ; |
00401F50   .  52            push edx                                 ; |TMPend8 = ntdll.KiFastSystemCallRet
00401F51   .  8D4D DC       lea ecx,dword ptr ss:[ebp-0x24]          ; |
00401F54   .  50            push eax                                 ; |TMPstep8 = NULL
00401F55   .  51            push ecx                                 ; |Counter8 = 0012FFB0
00401F56   .  FF15 1C414000 call dword ptr ds:[<&MSVBVM50.__vbaVarFo>; \ vbaVarForInit 重复执行初始化
00401F5C   .  8B1D 68414000 mov ebx,dword ptr ds:[<&MSVBVM50.__vbaVa>;  msvbvm50.__vbaVarCat
00401F62   .  8B3D 00414000 mov edi,dword ptr ds:[<&MSVBVM50.__vbaFr>;  msvbvm50.__vbaFreeVarList
00401F68   >  85C0          test eax,eax
00401F6A   .  0F84 BB000000 je Andréna.0040202B                      ;  要进行验证就要跳转
00401F70   .  8D55 94       lea edx,dword ptr ss:[ebp-0x6C]
00401F73   .  8D45 DC       lea eax,dword ptr ss:[ebp-0x24]
00401F76   .  52            push edx                                 ;  ntdll.KiFastSystemCallRet
00401F77   .  50            push eax
00401F78   .  C745 9C 01000>mov dword ptr ss:[ebp-0x64],0x1
00401F7F   .  C745 94 02000>mov dword ptr ss:[ebp-0x6C],0x2
00401F86   .  FF15 90414000 call dword ptr ds:[<&MSVBVM50.__vbaI4Var>;  msvbvm50.__vbaI4Var
00401F8C   .  8D4D BC       lea ecx,dword ptr ss:[ebp-0x44]          ; |
00401F8F   .  50            push eax                                 ; |Start = 0x0
00401F90   .  8D55 84       lea edx,dword ptr ss:[ebp-0x7C]          ; |
00401F93   .  51            push ecx                                 ; |dString8 = 0012FFB0
00401F94   .  52            push edx                                 ; |RetBUFFER = ntdll.KiFastSystemCallRet
00401F95   .  FF15 34414000 call dword ptr ds:[<&MSVBVM50.#632_rtcMi>; \rtcMidCharVar   截取字符串
00401F9B   .  8D45 84       lea eax,dword ptr ss:[ebp-0x7C]
00401F9E   .  8D4D A8       lea ecx,dword ptr ss:[ebp-0x58]
00401FA1   .  50            push eax                                 ; /String8 = NULL
00401FA2   .  51            push ecx                                 ; |ARG2 = 0012FFB0
00401FA3      FF15 64414000 call dword ptr ds:[<&MSVBVM50.__vbaStrVa>;  __vbastrvarval  从字符串特点位置上获取其值
00401FA9   .  50            push eax                                 ; /String = NULL
00401FAA   .  FF15 08414000 call dword ptr ds:[<&MSVBVM50.#516_rtcAn>; \rtcAnsiValueBstr  传回字符码(返回第一个字符的字符代码)
00401FB0   .  66:05 0A00    add ax,0xA                               ;  依次截取的字符 16进制 +A 转换新的字符
00401FB4   .  0F80 B0020000 jo Andréna.0040226A
00401FBA   .  0FBFD0        movsx edx,ax
00401FBD   .  52            push edx                                 ;  ntdll.KiFastSystemCallRet
00401FBE   .  FF15 70414000 call dword ptr ds:[<&MSVBVM50.#537_rtcBs>;  msvbvm50.rtcBstrFromAnsi
00401FC4   .  8985 7CFFFFFF mov dword ptr ss:[ebp-0x84],eax
00401FCA   .  8D45 CC       lea eax,dword ptr ss:[ebp-0x34]
00401FCD   .  8D8D 74FFFFFF lea ecx,dword ptr ss:[ebp-0x8C]
00401FD3   .  50            push eax
00401FD4   .  8D95 64FFFFFF lea edx,dword ptr ss:[ebp-0x9C]
00401FDA   .  51            push ecx
00401FDB   .  52            push edx                                 ;  ntdll.KiFastSystemCallRet
00401FDC   .  C785 74FFFFFF>mov dword ptr ss:[ebp-0x8C],0x8
00401FE6   .  FFD3          call ebx
00401FE8   .  8BD0          mov edx,eax
00401FEA   .  8D4D CC       lea ecx,dword ptr ss:[ebp-0x34]
00401FED   .  FFD6          call esi
00401FEF   .  8D4D A8       lea ecx,dword ptr ss:[ebp-0x58]          ;  连接计算后的字符
00401FF2   .  FF15 B0414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeS>;  msvbvm50.__vbaFreeStr
00401FF8   .  8D85 74FFFFFF lea eax,dword ptr ss:[ebp-0x8C]
00401FFE   .  8D4D 84       lea ecx,dword ptr ss:[ebp-0x7C]
00402001   .  50            push eax
00402002   .  8D55 94       lea edx,dword ptr ss:[ebp-0x6C]
00402005   .  51            push ecx
00402006   .  52            push edx                                 ;  ntdll.KiFastSystemCallRet
00402007   .  6A 03         push 0x3
00402009   .  FFD7          call edi
0040200B   .  83C4 10       add esp,0x10
0040200E   .  8D85 ECFEFFFF lea eax,dword ptr ss:[ebp-0x114]
00402014   .  8D8D FCFEFFFF lea ecx,dword ptr ss:[ebp-0x104]
0040201A   .  8D55 DC       lea edx,dword ptr ss:[ebp-0x24]
0040201D   .  50            push eax                                 ; /TMPend8 = NULL
0040201E   .  51            push ecx                                 ; |TMPstep8 = 0012FFB0
0040201F   .  52            push edx                                 ; |Counter8 = ntdll.KiFastSystemCallRet
00402020   .  FF15 A4414000 call dword ptr ds:[<&MSVBVM50.__vbaVarFo>; \ __vbavarfornext  是VB程序里的循环结构
00402026   .^ E9 3DFFFFFF   jmp Andréna.00401F68
0040202B   >  8D45 CC       lea eax,dword ptr ss:[ebp-0x34]
0040202E   .  8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC]
00402034   .  50            push eax                                 ; /var18 = NULL
00402035   .  51            push ecx                                 ; |var28 = 0012FFB0
00402036   .  C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],Andréna.0040>; |UNICODE "kXy^rO|*yXo*m\kMuOn*+"
00402040   .  C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x8008       ; |
0040204A   .  FF15 40414000 call dword ptr ds:[<&MSVBVM50.__vbaVarTs>; \_vbaVarTstEq // 比较变量是否相等
00402050   .  66:85C0       test ax,ax
00402053   .  0F84 C0000000 je Andréna.00402119                      ;  关键跳转




事实证明我的做法十分正确! 再次吐槽没什么鬼用的call 和代码真的多, 将所有OD识别过来的函数作用全部注释后瞬间对这个事件的大概作用明白了
再次深人了解前,我们先暴力将关键跳转修改再次验证此事件是否关键事件
5.png

嗯呢,可以继续深入了解了,
    接下来是关键:
事件将输入的字符进行循环,循环的过程中,依次将输入的字符进行  +  0xA 操作,然后组成新的字符和 UNICODE "kXy^rO|*yXo*m\kMuOn*+"
字符进行匹配,匹配成功进行跳转
      总体来说这个程序进行的操作相对简单,比起我第一个帖子那个让OK键消失的程序友好,小动作少多了


接下来就是注册机:


[C] 纯文本查看 复制代码
#include<stdio.h>
#include<string.h>
#include<iostream>
int main()
{
	char encrypt[100] = "kXy^rO|*yXo*m\\kMuOn*+";
	char key[100] = {0};
	int len = strlen(encrypt);
	printf("encrypt is len : %d\n",len);
	for(int i=0;i<len;i++)
	{
		key[i]= encrypt[i] - 0xA;
	}
	printf("key is :%s \n",key);
	system("pause");
	return 0;
}



6.png

key :   aNoThEr oNe cRaCkEd !


帖子最后在写几个能找到关键事件的办法 :
  vb窗口断点:
OD中鼠标右键查找二进制字符串 :搜索  “816C24”,或者ctrl +b
OD跳转过去后当前代码下会有个JMP跳转 F4运行到当前JMP,然后F8就可以跳到关键事件(通常来说有几个JMP就会有几个程序窗口,此方法也是学习来的,具体是怎么原理也是不太明白,不过实测有效)
   查看调用堆栈:
OD直接运行程序,到错误窗口弹出后,暂停下程序,工具栏 ---》查看  -----》调用堆栈(或者ALt+ k)
找到最后一行,右键-----》显示函数调用
7.png
显示函数调用后向上看,就会发现代码很熟悉,其实这就是验证失败后失败窗口弹出的CALL

Andrénalin.3.rar (3.8 KB, 下载次数: 14)


(此程序····)
(菜鸟发帖有错误的地方请大佬指出,欢迎一起学习~~)    小蜗牛呀,一步一步往上爬~~~

免费评分

参与人数 10威望 +2 吾爱币 +19 热心值 +10 收起 理由
qiankun + 1 + 1 热心回复!
52lxw + 1 谢谢@Thanks!
一不小心就丶 + 1 + 1 热心回复!
lookerJ + 1 + 1 谢谢@Thanks!
SnowRen + 1 + 1 我很赞同!
IM小健 + 1 + 1 看了你的帖子才知道有160个cm这东西,看来还是论坛没逛够啊
Poner + 2 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
二逼159 + 1 + 1 谢谢@Thanks!
xtx + 1 + 1 谢谢@Thanks!
wTiAwTiAw + 2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| hjm666 发表于 2018-5-6 20:23
一不小心就丶 发表于 2018-5-5 10:07
完全看不懂,我该怎么起步?

吾爱有基础的自学逆向的导航帖,多去了解了解,多积累经验就可以了
 楼主| hjm666 发表于 2018-5-7 16:18
陌上寒烟薄雪 发表于 2018-5-2 12:12
shagua 发表于 2018-5-2 12:33
原创厉害了
我叫蛋dan 发表于 2018-5-2 12:48
支持一下原创文章 挺好
wTiAwTiAw 发表于 2018-5-2 13:20
好久没玩160个CM了,我有空也和表哥一起玩玩
fq645122 发表于 2018-5-2 13:42
可以练练手
loxohc 发表于 2018-5-2 15:34
厉害了 膜拜
杨粥炒范 发表于 2018-5-2 16:52
感谢大佬分享!
lizongde 发表于 2018-5-2 18:23
谢谢楼主提供辛苦了!
SnowRen 发表于 2018-5-2 20:38
以前参考着文章练过,不错
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 16:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表