能力值:
( LV2,RANK:10 )
|
-
-
179 楼
活活。。。终于搞定了。问题是注册码找出来我还不知道怎么找的。只知道用 bp __vbaStrCmp
下断后F7见call就进估计走了不少弯路。。。
name:paulhou
sn:M_@Lmqx
name:xxoo
sn:Owhp
|
能力值:
( LV2,RANK:10 )
|
-
-
180 楼
对于这样简单的软件
我也只会爆破 汗``
00401072 . /75 1B jnz short 0040108F
把75改74或者nop掉!
|
能力值:
( LV2,RANK:10 )
|
-
-
187 楼
我写的CrackMe
用vc6写的,没有壳,没有修改IAT,有Anti-Debug代码
算法不难
http://bbs.pediy.com/showthread.php?threadid=12375
有Anti-Debug代码 的该如何跟入???
|
能力值:
( LV2,RANK:10 )
|
-
-
191 楼
这个....我要开始学学..发现一个人没意思的时候找。.学程序吧好象太费劲了..几年也不成学到什么,还容易忘..我这样想的。.
|
能力值:
( LV2,RANK:10 )
|
-
-
192 楼
感谢楼主 我感觉还是从函数返回值往上找 思路比较清晰 (个人观点)
我刚刚初学问个简单问题注册按钮下面的Locked Function按钮是干啥用的啊?
|
能力值:
( LV4,RANK:50 )
|
-
-
193 楼
经过两次脱壳,终于找到了注册码
第一个壳yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h) *
不知道是不是壳,以前没见过,
第二个壳是upx最简单的壳
两个壳用esp定律都可以脱掉
用户名:keheng
注册码:626898387088424554626712748
高兴ing........................
|
能力值:
( LV4,RANK:50 )
|
-
-
194 楼
找到注册码:
用户名:keheng
注册码:HNT-3121-0551-0729-CZ
注册码要获取本机的计算机名称参与计算,对研究代码还不熟悉,所以暂时无法写出注册机
|
能力值:
( LV4,RANK:50 )
|
-
-
195 楼
真晕哦,这个一运行就退出。
GetStartupInfoA也不知道这个函数是做什么的,怎么样才可以让它不退出呢。。。。。。。。。。
我觉得对我们这些小菜是有点难度的。
|
能力值:
( LV2,RANK:10 )
|
-
-
197 楼
我补充一些最基本地东西!
我也是新人哈
第一次尝试!因为我碰到一个问题:
我按照楼主的第一步
bp MessageBoxA 下断点的时候呢,根本没有断掉,直接跑飞了[现在还不知道根本的原因]
然后我们重新加载要破解的文件。
1:加载文件;
2:Ctrl+N -->我们查看该PE文件中用到得API, 找到 USER32.MessageBoxA
点击右键:--->Conditional breakpoint on import
输入: --> bp MessageBoxA, 确定
3:F9运行程序, 然后输入 name , code, 确定提交
77D507AA > 8BFF mov edi, edi
77D507AC /. 55 push ebp ;注册失败的,提示框入口
77D507AD |. 8BEC mov ebp, esp
77D507AF |. 833D BC14D777>cmp dword ptr [77D714BC], 0
77D507B6 |. 74 24 je short 77D507DC
77D507B8 |. 64:A1 1800000>mov eax, dword ptr fs:[18]
77D507BE |. 6A 00 push 0
77D507C0 |. FF70 24 push dword ptr [eax+24]
77D507C3 |. 68 241BD777 push 77D71B24
77D507C8 |. FF15 C412D177 call dword ptr [<&KERNEL32.Interlocke>; kernel32.InterlockedCompareExchange
77D507CE |. 85C0 test eax, eax
77D507D0 |. 75 0A jnz short 77D507DC
77D507D2 |. C705 201BD777>mov dword ptr [77D71B20], 1
77D507DC |> 6A 00 push 0 ; /LanguageID = 0 (LANG_NEUTRAL)
77D507DE |. FF75 14 push dword ptr [ebp+14] ; |Style
77D507E1 |. FF75 10 push dword ptr [ebp+10] ; |Title
77D507E4 |. FF75 0C push dword ptr [ebp+C] ; |Text
77D507E7 |. FF75 08 push dword ptr [ebp+8] ; |hOwner
77D507EA |. E8 2D000000 call MessageBoxExA ; \MessageBoxExA
77D507EF |. 5D pop ebp
77D507F0 \. C2 1000 retn 10 ;这里是返回点,返回到失败前的判断位置
因此我们要一路F7,直到
77D507EA |. E8 2D000000 call MessageBoxExA ; \MessageBoxExA
然后F8, 在继续F7 直到返回到,比较我们的输入的注册码的位置[下面]
00401069 . 85C0 test eax, eax
0040106B . 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL
0040106D . 68 80504000 push 00405080 ; |Title = "ncrackme"
00401072 74 1B jnz short 0040108F ;jnz 修改为 je [爆破] ;
00401074 . A1 B8564000 mov eax, dword ptr [4056B8] ; |
00401079 . 68 64504000 push 00405064 ; |Text = "Registration successful."
0040107E . 50 push eax ; |hOwner => 000E0628 ('Newbie smallsize crackme - v1',class='myWindowClass')
0040107F . FF15 C0404000 call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
00401085 . E8 A6020000 call 00401330
0040108A . 33C0 xor eax, eax
0040108C . C2 1000 retn 10
0040108F > 8B0D B8564000 mov ecx, dword ptr [4056B8] ; |
00401095 . 68 50504000 push 00405050 ; |Text = "Registration fail."
0040109A . 51 push ecx ; |hOwner => 000E0628 ('Newbie smallsize crackme - v1',class='myWindowClass')
0040109B . FF15 C0404000 call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
004010A1 . 33C0 xor eax, eax
004010A3 . C2 1000 retn 10
大概就是这些要补充的,因为有的新人会碰到,断点不被执行的问题!
因此我就根据我碰到的问题,补充一下。
后面接着继续学习楼主的注册算法:)
谢谢大家的分享
|
能力值:
( LV2,RANK:10 )
|
-
-
198 楼
这个比较简单啊,版主能否找些无提示信息的cm,有写技巧的cm啊。我现在就是遇到些难得破解时,不知道下什么断点。请搞手指点一下
|
能力值:
( LV2,RANK:10 )
|
-
-
199 楼
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char** argv)
{
char *pusername = "test";
char *ppassword = "88888888";
int a;
_asm
{
mov ebx,pusername
movzx eax,byte ptr [ebx]
movzx ecx,byte ptr [ebx+1]
cdq
idiv ecx
mov ecx, edx
or eax, 0xFFFFFFFF
movsx edx, byte ptr [ebx+2]
imul ecx, edx
inc ecx
xor edx, edx
div ecx
mov a,eax
}
printf("a=%d\n",a);
int b;
char register_code[15]="";
for(int i=0; i<15; i++)
{
//call 0040134A
_asm
{
mov eax, a
imul eax, eax, 0X343FD
add eax, 0X269EC3
mov a, eax
sar eax, 0X10
and eax, 0X7FFF
mov b,eax
}
//end call
char temp=NULL;
_asm
{
cdq
mov ecx, 0X1A
idiv ecx
add dl, 0X41
mov temp, dl
}
register_code[i]=temp;
}//end for
//printf("The register code:%s\n",register_code);
char register_code_result[15]="";
int length = strlen(pusername)-1;
//k is the lenght of usernmae
for(int k=0; k<=length; k++)
{
char temp=pusername[k];
int j;
int n;
_asm
{
mov al, temp
sar al, 5
movsx eax, al
lea edx, dword ptr [eax+eax*4]
lea eax, dword ptr [eax+edx*8]
lea eax, dword ptr [eax+eax*2]
mov n,eax
}
// test eax, eax
// jle short 004012EE
/* if(n ==n )
{
goto next_step;
}
*/
_asm
{
mov j, eax
}
/*next_step:*/
for(;j>0;j--)
{
//call 0040134A
_asm
{
mov eax, a
imul eax, eax, 0X343FD
add eax, 0X269EC3
mov a, eax
sar eax, 0X10
and eax, 0X7FFF
mov b,eax
}
//end call
}
//call 0040134A
_asm
{
mov eax, a
imul eax, eax, 0X343FD
add eax, 0X269EC3
mov a, eax
sar eax, 0X10
and eax, 0X7FFF
mov b,eax
}
//end call
char password_temp=ppassword[k];
char temp_p;
_asm
{
cdq
mov eax, b ;The eax is changed after cdq
mov ecx, 0X1A
idiv ecx
movsx ecx, password_temp
add dl, 0X41
movsx eax, dl
sub eax, ecx
mov temp_p, dl
cdq
xor eax, edx
or ecx, 0XFFFFFFFF
sub eax, edx
add ebx, eax
xor eax, eax
}
register_code[k]=temp_p;
}
printf("The register code:%s\n",register_code);
return 0;
}
|