xulrmb 发表于 2008-9-2 15:52

一个用javascript写的注册机

某船舶管理系统软件的注册机,算法不难,练练手,我的第一个注册机。
算法部分汇编原码
/mov   edx, dword ptr          
|xor       eax, eax
|mov   al, byte ptr          
|mov   ebx, eax
|add   ebx, ebx
|lea      ebx, dword ptr    
|mov   eax, dword ptr    
|mov   ecx, dword ptr             
|mov   ecx, dword ptr    
|mov   eax, dword ptr    
|mov   edi, dword ptr          
|mov   eax, dword ptr       
|mov   ebx, dword ptr
|mov   edi, dword ptr          
|mov   ebx, dword ptr       
|add   edx, ebx
|add   ebx, edx
|mov   edi, edx
|shr      edi, 7
|xor      edx, edi
|add   ecx, edx
|add   edx, ecx
|mov   edi, ecx
|shl      edi, 0D
|xor      ecx, edi
|add   eax, ecx
|add   ecx, eax
|mov   edi, eax
|shr      edi, 11
|xor      eax, edi
|add   ebx, eax
|add   eax, ebx
|mov   edi, ebx
|shl       edi, 9
|xor      ebx, edi
|add   edx, ebx
|add   ebx, edx
|mov   edi, edx
|shr      edi, 3
|xor      edx, edi
|add   ecx, edx
|mov   edx, ecx
|shl      edx, 7
|xor      ecx, edx
|add   eax, ecx
|mov   edx, ebx
|shr      edx, 0F
|xor      eax, edx
|add   ebx, eax
|mov   eax, ebx
|shl      eax, 0B
|xor      ebx, eax
|mov   eax, dword ptr
|xor      eax, ebx
|mov   edx, dword ptr
|mov   dword ptr , edx
|mov   dword ptr , eax
|add   esi, 0C
|dec   dword ptr
\jnz      004CE06B
-------------------------------------------------------------------------------------------------------------------------------
部分注册机代码:
var ESI =
var ESP = ;//保存处理过的机器码
var STATIC_CODE = ; //一组静态的值,用于处理输入的机器码
function MyObject(str){//用于定义对象,达到传地址的效果
this.value = str;
}
function getCode(){
this.JQM = new MyObject("");
this.EDX = new MyObject(0x3c69);
this.AL = new MyObject(null);
this.EBX = new MyObject(null);
this.EAX = new MyObject(null);
this.ECX = new MyObject(null);
this.CURSE = new MyObject(0);
this.ESP_10 = new MyObject(0x76da);
this.ESP_C = new MyObject(0x3c69);
this.final_first = 0;
this.final_sec = 0;
this.printObj = printObj;
this.excute = excute;
}
function Coding(E1,E2,SH_NUM,TYPE){
var EDI;
E1.value = E1.value + E2.value;
E2.value = E2.value + E1.value;
EDI = E1.value;
if(TYPE=="R")
EDI = EDI >>> SH_NUM;
else
EDI = EDI << SH_NUM;
E1.value = E1.value ^ EDI;
}
function Coding_test(E1,E2,SH_NUM,TYPE){
var EDI;
E1.value = E1.value + E2.value;
E2.value = E2.value + E1.value;
EDI = E1.value;
if(TYPE=="R")
EDI = EDI >>> SH_NUM;
else
EDI = EDI << SH_NUM;
E1.value = E1.value ^ EDI;
}
function Coding_1(E1,E2,SH_NUM,TYPE){
E1.value = E1.value + E2.value;
E2.value = E1.value;
if(TYPE=="L"){
E2.value = E2.value << SH_NUM;
}
else
E2.value = E2.value >>> SH_NUM;
E1.value = E1.value ^ E2.value;
}
function Coding_2(E1,E2,E3,E4,SH_NUM){
E1.value = E1.value + E2.value;
E3.value = E4.value;
E3.value = E3.value >>> SH_NUM;
E1.value = E1.value ^ E3.value;
}
function excute(){
for(i=0;i<4;i++){
this.AL.value = 1;
this.EBX.value = this.AL.value;
this.EBX.value = this.EBX.value + this.EBX.value;//EBX = 2
this.EBX.value = this.EBX.value + this.EBX.value*2;//EBX = 6
this.EAX.value = ESI;
this.ECX.value = ESP;
this.EAX.value = ESI;
this.EAX.value = ESP;
this.EBX.value = ESI;
this.EBX.value = ESP;
Coding(this.EDX,this.EBX,0x7,"R");//0x7
Coding_test(this.ECX,this.EDX,0xd,"L");//0xd
Coding(this.EAX,this.ECX,0x11,"R");//0x11
Coding(this.EBX,this.EAX,0x9,"L");//0x9
Coding(this.EDX,this.EBX,0x3,"R");//0x3
Coding_1(this.ECX,this.EDX,0x7,"L");//0x7
Coding_2(this.EAX,this.ECX,this.EDX,this.EBX,0xF);
Coding_1(this.EBX,this.EAX,0xB,"L");

this.EAX.value = this.ESP_10.value;
this.EAX.value = this.EAX.value ^ this.EBX.value;
this.EDX.value = this.ESP_C.value;
this.final_first = this.EAX.value;
this.final_sec = this.EDX.value;
this.ESP_10.value = this.EDX.value;
this.ESP_C.value = this.EAX.value;
this.EDX.value = this.ESP_C.value;
this.CURSE.value = this.CURSE.value + 0xc;
}
//负整数转换成16进制
if(this.final_first<0){
this.final_first = 0x100000000+this.final_first;
}
if(this.final_sec<0){
this.final_sec = 0x100000000+this.final_sec;
}
printObj(turnarround(this.final_sec.toString(16))+turnarround(this.final_first.toString(16)),"TEMP_TEXT");
}
function printObj(contect,target){
var targetObj = document.getElementById(target);
if(targetObj.value!=""){
targetObj.value = targetObj.value + "," + contect;
}
else{
targetObj.value = targetObj.value + contect;
}
}
//转换16进制格式
function turnarround(str){
var strUP = str.toUpperCase();
var str_return = "";
var two_char = "";
for(i=strUP.length-1;i>=0;i--){
two_char = strUP.charAt(i) + two_char;
if(two_char.length==2){
   str_return = str_return + two_char;
   two_char = "";
}
if((i-1)<0){
   if(two_char.length==1){
    str_return = str_return + "0"+two_char;
   }
}
}
return str_return;
}


写的过程中遇到两个问题

1、javascript的传地址问题,传地址好像实现不了,所以改用传递对象

2、负整数转16进制问题,解决办法就是负整数 + 4294967296 再用toString(16)转成16进制

如有更好的解决办法欢迎提出~

我本机的机器码是60303725   
算出来注册码是:CB7B3E0E1ED0A5DD
可成功注册。

[ 本帖最后由 xulrmb 于 2008-9-2 16:05 编辑 ]
页: [1]
查看完整版本: 一个用javascript写的注册机