能力值:
( LV2,RANK:10 )
|
-
-
426 楼
所谓小端结束,就是存储常数或寄存器时,低字节存储在低地址,读取的时候内存高地址字节放在前面(高位)
比如
内存地址 存储数据
0 0x12
1 34
2 56
3 78
如果有一条指令 MOV EBX,DWORD PTR DS:[00000000]
此时ebx=78563412
以下内容来自Pconline:
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。
对你的工作表示敬意!!
|
能力值:
( LV2,RANK:10 )
|
-
-
427 楼
学习了LZ辛苦了
|
能力值:
( LV2,RANK:10 )
|
-
-
428 楼
继续下午没看完的教程,感觉写的容易理解
|
能力值:
( LV2,RANK:10 )
|
-
-
429 楼
学习一下~~
|
能力值:
( LV2,RANK:10 )
|
-
-
430 楼
第四篇看完,,,明天继续。。
|
能力值:
( LV2,RANK:10 )
|
-
-
431 楼
谢楼主,入门砖呐
|
能力值:
( LV2,RANK:10 )
|
-
-
432 楼
大家说说,不顶行吗?
楼主辛苦了!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
433 楼
虽然很久以前就开始破解,但一直没有系统的学习,看来还使得扎实的学习才可以的。
|
能力值:
( LV2,RANK:10 )
|
-
-
434 楼
看这样子,我还是从汇编开始学起吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
435 楼
感谢楼主细心讲解,收获不少。
强烈支持楼主。
|
能力值:
( LV2,RANK:10 )
|
-
-
436 楼
卷标:GAME,则 ds:[0040339C]=9FCF87AA
卷标:空白,则 ds:[0040339C]=00000000
空白卷标,00401310下断点,esi=00401125 (CrackHea.00401125)
|
能力值:
( LV2,RANK:10 )
|
-
-
437 楼
学习一下~努力学习中
|
能力值:
( LV2,RANK:10 )
|
-
-
438 楼
表示没看懂
|
能力值:
( LV2,RANK:10 )
|
-
-
439 楼
好东西,学习。。。。。。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
440 楼
這好像是c call 而不是 stdcall ??
|
能力值:
( LV2,RANK:10 )
|
-
-
441 楼
感谢楼主分享!
|
能力值:
( LV2,RANK:10 )
|
-
-
442 楼
很好很强大,仔细观摩完了
|
能力值:
( LV2,RANK:10 )
|
-
-
443 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
444 楼
学习了
|
能力值:
( LV2,RANK:10 )
|
-
-
445 楼
坚决支持,期待系列续..
|
能力值:
( LV2,RANK:10 )
|
-
-
446 楼
终于把注册机给写出来了。不过计算实在不知道怎写,就直接抄的ASM代码。
void CkeygenDlg::OnBnClickedOk()
{
char* a1 = new char[100];
memset(a1, 0, 100);
int type1 = GetDriveTypeA(0);
char* b1 = new char[100];
memset(b1, 0, 100);
GetVolumeInformationA(0,b1,0x0b,0,0,0,0,0);
char* c1 = new char[100];
memset(c1, 0, 100);
_asm
{
PUSHAD
MOV ESI,dword ptr[b1]
MOVZX ECX,type1
XOR EDI,EDI
abc:
MOV EAX,ECX
MOV EBX,DWORD PTR DS:[ESI]
MUL EBX
ADD EDI,EAX
DEC ECX
CMP ECX,0
JNZ abc
MOV EBX,c1
MOV [EBX],EDI
POPAD
}
*(DWORD *)c1 = *(DWORD *)c1^0x797A7553;
//XOR ESI,797A7553
sprintf(c1,"%d",*(DWORD *)c1);
CString wc1(c1);
t1.SetWindowTextW(wc1);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
447 楼
很好的文章,讲得很细致 嘿嘿~
看完楼上的,自己也用C写了个注册机:
// -------------------------------------
// 需要和CrackHead.exe放在同一盘符下才行
// -------------------------------------
#include <windows.h>
#include <stdio.h>
int main()
{
TCHAR szBuf[128];
int n;
unsigned int iKey, iSum=0;
n = GetDriveType(NULL);
GetVolumeInformation(0, szBuf, 0x0b,
0, 0, 0, 0, 0);
// Key值只占用1个寄存器大小,四个节
// 寄存器里字节存放次序与内存存放次序相反,所以倒过来
// 每向高处移动一字节(8位),需要乘2^8
iKey = szBuf[0] + szBuf[1]*16*16 + szBuf[2]*16*16*16*16 +
szBuf[3]*16*16*16*16*16*16;
for (int i=0; i<n; i++)
{
iSum += (n-i)*iKey;
}
iSum ^= 0x797a7553;
printf("Key: %lu\n", iSum);
system("PAUSE");
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
448 楼
多年以后,仍然看的很精彩
|
能力值:
( LV2,RANK:10 )
|
-
-
449 楼
这几天天天在学习看雪文章
|
能力值:
( LV2,RANK:10 )
|
-
-
450 楼
学习了,一直想学这方面的知识
|
|
|