工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1414|回复: 0

一个用javascript写的注册机

[复制链接]
发表于 2008-9-2 15:52 | 显示全部楼层 |阅读模式
某船舶管理系统软件的注册机,算法不难,练练手,我的第一个注册机。
算法部分汇编原码
/mov     edx, dword ptr [esp+C]         
|xor       eax, eax
|mov     al, byte ptr [esp+8]         
|mov     ebx, eax
|add     ebx, ebx
|lea      ebx, dword ptr [ebx+ebx*2]   
|mov     eax, dword ptr [esi+ebx*8]     
|mov     ecx, dword ptr [esp]            
|mov     ecx, dword ptr [ecx+eax*4]     
|mov     eax, dword ptr [esi+ebx*8+4]   
|mov     edi, dword ptr [esp]           
|mov     eax, dword ptr [edi+eax*4]      
|mov     ebx, dword ptr [esi+ebx*8+8]  
|mov     edi, dword ptr [esp]         
|mov     ebx, dword ptr [edi+ebx*4]      
|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 [esp+10]
|xor      eax, ebx
|mov     edx, dword ptr [esp+C]
|mov     dword ptr [esp+10], edx
|mov     dword ptr [esp+C], eax
|add     esi, 0C
|dec     dword ptr [esp+14]
\jnz      004CE06B
-------------------------------------------------------------------------------------------------------------------------------
部分注册机代码:
var ESI = [0,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0]
var ESP = [0x0,0x0,0x0,0x0];//保存处理过的机器码
var STATIC_CODE = [0x8962f635,0x106be105,0xa726a327,0x1eeba49e]; //一组静态的值,用于处理输入的机器码
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.CURSE.value+this.EBX.value*8];
  this.ECX.value = ESP[this.EAX.value];
  this.EAX.value = ESI[this.CURSE.value+this.EBX.value*8+4];
  this.EAX.value = ESP[this.EAX.value];
  this.EBX.value = ESI[this.CURSE.value+this.EBX.value*8+8];
  this.EBX.value = ESP[this.EBX.value];
  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 编辑 ]

注册机20080902-1556.rar

2.33 KB, 下载次数: 303

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-13 12:00

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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