影像合成的利器 2003 v4(一)註冊演算法 (8千字)
標 題:影像合成的利器 2003 v4(一)註冊演算法 (8千字)
發信人:lq7972 [發短訊息]
時 間:2003-09-29 16:52:05
詳細資訊:
Software:h*y*2003 v4.06
影像合成的利器
Tools:IDA Pro v4.5、TRW 2000
Cracker:lq7972[bruceyu13@sina.com]
Notes:學習。以前用過它的老版本,今天看到新點的就裝上了;由於上次PJ的資料丟了,只好從頭來~這個軟體實屬國產精品,有條件就註冊用Z版;如果你只是為了省錢,那麼不用看這篇文字了
記得老版本中的序號產生器制是非常典型的真假碼對比跳轉,斷點“bpx hmemcpy”很容易找到註冊碼比較的地方~實際上攔住轉到程式領空後“d ecx”再Alt+↑↓就見得到了,可見程式是事先把註冊碼計算好,再透過開啟註冊介面獲得使用者輸入,最後比較
我關心的是它演算法~
TRW載入,斷點“bpx SendMessage”(其它如ShowWindow等等也行,但CreateWindow就~),按F5,開啟註冊視窗,攔住後“pmodule”,來到程式介面,按ESC鍵退出註冊視窗,再次中斷;現在我們看看在哪裡?
snyped:004119B8 mov [esp+0C0h+var_18], eax
snyped:004119BF call ?DoModal@CDialog@@UAEHXZ CDialog::DoModal(void)
snyped:004119C4 cmp eax, 1
snyped:004119C7 jnz short loc_4119EC
004119BF處的Call就是了。好,基於前面的分析我們從這裡往前不遠應該能找到註冊演算法或呼叫註冊演算法的Call--果然,上面就有這麼一句
snyped:004118E1 call ds:GetComputerNameA
看來正在接近中。。。
snyped:004118B0 push offset asc_4404E4 "%x"
snyped:004118B5 push eax
snyped:004118B6 mov byte ptr [esp+0CCh+var_4], bl
snyped:004118BD call ?Format@CString@@QAAXPBDZZ CString::Format(char const *,...)
激動中。。。
snyped:00411831 lea edx, [esp+100h+var_90]
snyped:00411835 push offset aCCCCCCCCCCCCCC "%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c"
snyped:0041183A push edx
snyped:0041183B call ?Format@CString@@QAAXPBDZZ CString::Format(char const *,...)
snyped:00411840 mov eax, [esp+108h+var_A4]
到這裡,"%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c"這個東西應就是註冊碼的格式了!註冊演算法就在這裡!
再次激動。。。
頂上就是註冊演算法
snyped:004116B1
snyped:004116B1 loc_4116B1: CODE XREF: sub_410FD0+5DDj
snyped:004116B1 mov eax, [edi+0D0h] ;這個值?(387F9FFh)
snyped:004116B7 cmp eax, ebx
snyped:004116B9 jnz short loc_41171A
;。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
loc_41171A: CODE XREF: sub_410FD0+6E9j
snyped:0041171A add eax, 0BCC09h ;加上0BCC09h
snyped:0041171F push eax
snyped:00411720 lea eax, [esp+0C4h+var_A8]
snyped:00411724 push offset a8d "%8d"
snyped:00411729 push eax
snyped:0041172A call ?Format@CString@@QAAXPBDZZ CString::Format(char const *,...) ;這個是Hex2Dec
snyped:0041172F mov eax, [esp+0CCh+var_A8] ;Num
snyped:00411733 add esp, 0Ch
;從這裡正式開始。。。
snyped:00411736 mov dl, [eax+1]
snyped:00411739 mov cl, [eax]
snyped:0041173B movsx eax, byte ptr [eax+2]
snyped:0041173F movsx edx, dl
snyped:00411742 movsx ecx, cl
snyped:00411745 add eax, edx
snyped:00411747 lea eax, [eax+ecx-90h]
snyped:0041174E mov ecx, 7
snyped:00411753 cdq
snyped:00411754 idiv ecx
snyped:00411756 lea ecx, [esp+0C0h+var_A8]
snyped:0041175A add dl, 30h
;歇一下,喘口氣
snyped:0041175D push edx
snyped:0041175E push 3
snyped:00411760 call ?SetAt@CString@@QAEXHD@Z CString::SetAt(int,char)
;這個是結果替換Num第4位
snyped:00411765 mov eax, [esp+0C0h+var_A8]
;開始~
snyped:00411769 mov dl, [eax+5]
snyped:0041176C mov cl, [eax+4]
snyped:0041176F movsx eax, byte ptr [eax+6]
snyped:00411773 movsx edx, dl
snyped:00411776 movsx ecx, cl
snyped:00411779 add eax, edx
snyped:0041177B lea eax, [eax+ecx-90h]
snyped:00411782 mov ecx, 7
snyped:00411787 cdq
snyped:00411788 idiv ecx
snyped:0041178A add dl, 30h
;再歇歇
snyped:0041178D push edx
snyped:0041178E push ecx
snyped:0041178F lea ecx, [esp+0C8h+var_A8]
snyped:00411793 call ?SetAt@CString@@QAEXHD@Z CString::SetAt(int,char)
;這個是結果替換Num第8位
snyped:00411798 mov eax, [esp+0C0h+var_A8]
;Come on~
snyped:0041179C mov cl, [eax+2]
snyped:0041179F mov bl, [eax+1]
snyped:004117A2 mov dl, [eax+7]
snyped:004117A5 mov [esp+0C0h+var_AD], cl
snyped:004117A9 mov cl, [eax+3]
snyped:004117AC mov [esp+0C0h+var_A9], bl
snyped:004117B0 mov bl, [eax+4]
snyped:004117B3 mov [esp+0C0h+var_AB], cl
snyped:004117B7 mov cl, [eax+6]
snyped:004117BA mov [esp+0C0h+var_AA], bl
snyped:004117BE mov bl, [eax]
snyped:004117C0 mov al, [eax+5]
snyped:004117C3 mov [esp+0C0h+var_AC], al
;計算完
;最後處理並格式化輸出,要注意前後變數(變數沒有r/s)的移送:
snyped:004117C7 movsx eax, dl ;從第16位到第1位
snyped:004117CA push eax
snyped:004117CB movsx eax, [esp+0C4h+var_AD]
snyped:004117D0 add eax, 15h
snyped:004117D3 push eax
snyped:004117D4 movsx eax, [esp+0C8h+var_AB]
snyped:004117D9 push eax
snyped:004117DA movsx eax, cl
snyped:004117DD add eax, 17h
snyped:004117E0 push eax
snyped:004117E1 movsx eax, [esp+0D0h+var_A9]
snyped:004117E6 push eax
snyped:004117E7 movsx eax, [esp+0D4h+var_AA]
snyped:004117EC add eax, 11h
snyped:004117EF push eax
snyped:004117F0 movsx eax, bl
snyped:004117F3 push eax
snyped:004117F4 movsx eax, [esp+0DCh+var_AC]
snyped:004117F9 add eax, 11h
snyped:004117FC push eax
snyped:004117FD movsx eax, cl
snyped:00411800 push eax
snyped:00411801 movsx eax, [esp+0E4h+var_AB]
snyped:00411806 add eax, 13h
snyped:00411809 push eax
snyped:0041180A movsx eax, [esp+0E8h+var_AA]
snyped:0041180F push eax
snyped:00411810 movsx edx, dl
snyped:00411813 movsx eax, [esp+0ECh+var_AC]
snyped:00411818 add edx, 12h
snyped:0041181B push edx
snyped:0041181C push eax
snyped:0041181D movsx edx, [esp+0F4h+var_AD]
snyped:00411822 movsx eax, cl
snyped:00411825 movsx ecx, bl
snyped:00411828 add edx, 1Bh
snyped:0041182B add ecx, 11h
snyped:0041182E push edx
snyped:0041182F push eax
snyped:00411830 push ecx
snyped:00411831 lea edx, [esp+100h+var_90]
snyped:00411835 push offset aCCCCCCCCCCCCCC "%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c
snyped:0041183A push edx
snyped:0041183B call ?Format@CString@@QAAXPBDZZ CString::Format(char const *,...) ;ECX指向生成的註冊碼
很簡單吧?
寫序號產生器,還是用MASM32,方便,照抄就行:)
【序號產生器】
;//////////////////////////////////////////////////////////////////////////////////////////////
;今天有點事兒要辦,晚上再寫吧
標 題:hy2003 v 4.0.6 序號產生器(MASM32) (6千字)
發信人:lq7972
時 間:2003-10-01 17:44:12
詳細資訊:
hy2003 v 4.0.6 序號產生器(MASM32)
Notes:到今天才寫它,因為終於要放幾天假啦;啦啦啦啦~
[補遺]上面對那個值(004116B1 mov eax, [edi+0D0h])沒有弄明白:原以為是軟體的固定值;到今天寫序號產生器才知道它需要也可以從軟體編號反算出來,見序號產生器原始碼--其它的主要是注意透過對這個值進行不停的或前或後取(並計算)出注冊碼
KeyGen.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; The KeyGen by lq7972,with MASM32 V8
; E-mail:bruceyu13@sina.com
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;Include檔案定義
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
include comdlg32.inc
includelib comdlg32.lib
include masm32.inc
includelib masm32.lib
;Equ等值定義
ICO_MAIN equ 1000H
DLG_MAIN equ 1
EditName equ 10
EditSN equ 11
;*************************************************************************************
.data?
szName db 11 dup (?)
szSN db 20 dup (?)
Reg1 dd 4 dup (?)
Reg2 dd 4 dup (?)
Reg3 dd 4 dup (?)
Reg4 dd 4 dup (?)
Temp dd 8 dup (?)
.data
hInstance dd 0
szErr db '請輸入!',0
szCaption db '錯誤!',0
RegFmt db '%4s-%4s-%4s-%4s',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;***************************************************************************************
_RegFmt proc
local @Temp1:byte,@Temp2:byte,@Temp3:byte,@Temp4:byte,@Temp5:byte
pushad
lea eax,offset Temp
mov cl,[eax+2]
mov bl,[eax+1]
mov dl,[eax+7]
mov byte ptr @Temp1,cl
mov cl,[eax+3]
mov byte ptr @Temp2,bl
mov bl,[eax+4]
mov byte ptr @Temp3,cl
mov cl,[eax+6]
mov byte ptr @Temp4,bl
mov bl,[eax]
mov al,[eax+5]
mov byte ptr @Temp5,al
mov byte ptr [Reg4+3],dl
movsx eax,byte ptr [@Temp1]
add eax,15h
mov byte ptr [Reg4+2],al
movsx eax,byte ptr [@Temp3]
mov byte ptr [Reg4+1],al
movsx eax,cl
add eax,17h
mov byte ptr [Reg4],al
movsx eax,byte ptr [@Temp2]
mov byte ptr [Reg3+3],al
movsx eax,byte ptr [@Temp4]
add eax,11h
mov byte ptr [Reg3+2],al
mov byte ptr [Reg3+1],bl
movsx eax,byte ptr [@Temp5]
add eax,11h
mov byte ptr [Reg3],al
mov byte ptr [Reg2+3],cl
movsx eax,byte ptr [@Temp3]
add eax,13h
mov byte ptr [Reg2+2],al
movsx eax,byte ptr [@Temp4]
mov byte ptr [Reg2+1],al
movsx edx,dl
movsx eax,byte ptr [@Temp5]
add edx,12h
mov byte ptr [Reg2],dl
mov byte ptr [Reg1+3],al
movsx edx,byte ptr [@Temp1]
movsx eax,cl
movsx ecx,bl
add edx,1Bh
add ecx,11h
mov byte ptr [Reg1+2],dl
mov byte ptr [Reg1+1],al
mov byte ptr [Reg1],cl
invoke wsprintf,addr szSN,addr RegFmt,addr Reg1,addr Reg2,addr Reg3,addr Reg4
popad
ret
_RegFmt endp
;***************************************************************************************
_RegCodCalc proc
pushad
invoke htodw,addr [szName+3] ;MASM32.LIB轉換函式,從軟體編號反算生成註冊碼的關鍵值
sub eax,0B4E9Dh
add eax,0BCC09h
invoke dwtoa,eax,addr Temp
lea eax,offset Temp
xor edx,edx
xor ecx,ecx
mov dl,[eax+1]
mov cl,[eax]
movsx eax,byte ptr [eax+2]
movsx edx,dl
movsx ecx,cl
add eax,edx
lea eax,[eax+ecx-90h]
mov ecx,7
cdq
idiv ecx
add dl,30h
mov byte ptr [Temp+3],dl
lea eax,offset [Temp]
mov dl,[eax+5]
mov cl,[eax+4]
movsx eax,byte ptr [eax+6]
movsx edx,dl
movsx ecx,cl
add eax,edx
lea eax,[eax+ecx-90h]
mov ecx,7
cdq
idiv ecx
add dl,30h
mov byte ptr [Temp+7],dl
invoke _RegFmt
popad
ret
_RegCodCalc endp
;**************************************************************************************
_ProcDlgMain proc uses ebx edi esi ebp hWnd,wMsg,wParam,lParam
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDOK
invoke RtlZeroMemory,offset szName,512
invoke GetDlgItemText,hWnd,EditName,offset szName,11
.if eax != NULL
invoke _RegCodCalc
invoke SetDlgItemText,hWnd,EditSN,offset szSN
mov eax,FALSE
ret
.else
invoke MessageBox,NULL,offset szErr,offset szCaption,MB_OK
mov eax,FALSE
ret
.endif
.elseif eax == IDCANCEL
invoke EndDialog,hWnd,NULL
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
KeyGen.rc
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include
#define ICO_MAIN 0x1000
#define DLG_MAIN 1
#define EDITName 10
#define EDITSN 11
//ICO_MAIN ICON "01.ico"
DLG_MAIN DIALOG 100,150,250,60
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "幻影2003 v4.06 序號產生器"
FONT 9,"宋體"
{
CONTROL "Name:" ,-1,"Static",SS_LEFT,10,13,40,17
CONTROL "Code:" ,-2,"Static",SS_CENTER,10,40,20,17
CONTROL "" ,10,"Edit",ES_LEFT,30,13,150,10
CONTROL "" ,11,"Edit",ES_LEFT,30,40,150,10
DEFPUSHBUTTON "GENERATE",IDOK,200,11,40,15
PUSHBUTTON "EXIT",IDCANCEL,200,36,41,14
}
makefile
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
NAME = KeyGen
OBJS = $(NAME).obj
RES = $(NAME).res
LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff
$(NAME).exe: $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.res
相關文章
- 模擬郵件伺服器,批量註冊利器2019-04-01伺服器
- 註冊中心 Eureka 原始碼解析 —— 應用例項註冊發現(一)之註冊2019-03-03原始碼
- 存在多個不同註冊中心的時候,如何平滑的統一註冊中心?2021-05-27
- k8s CSI 外掛註冊原理2024-09-02K8S
- oracle的靜態註冊和動態註冊2024-11-11Oracle
- 聊一聊RocketMQ的註冊中心NameServer2020-09-03MQServer
- 【SpringBoot】服務對註冊中心的註冊時機2024-05-25Spring Boot
- 動態註冊和靜態註冊2018-05-21
- SpringCloudAlibaba註冊中心與配置中心之利器Nacos實戰與原始碼分析(上)2022-04-10SpringGCCloud原始碼
- SpringCloudAlibaba註冊中心與配置中心之利器Nacos實戰與原始碼分析(中)2022-04-11SpringGCCloud原始碼
- 記一次中斷註冊2024-03-17
- NodeJs 建立一個簡單的登陸註冊2019-02-16NodeJS
- 研究網路卡地址註冊時的一點思考2019-04-30
- springboot註冊2024-03-09Spring Boot
- js 註冊事件的兩種方式詳解,傳統註冊事件與方法監聽註冊事件(addEventListener)2020-10-22JS事件dev
- npm註冊源的配置2018-04-16NPM
- Dubbo系列之 (二)Registry註冊中心-註冊(1)2020-08-09
- Dubbo系列之 (二)Registry註冊中心-註冊(2)2020-08-13
- .Net8 AddKeyedScoped鍵值key註冊服務異常2024-06-20
- spring cloud alibaba系列(一) 服務註冊2019-01-26SpringCloud
- 域名註冊平臺哪個好?帶你瞭解一下全球最大的域名註冊商GoDaddy2023-03-08Go
- gRPC 註冊中心,常用的註冊中心你懂了?AP 還是 CP (七)2019-10-08RPC
- 最好用的終端模擬器 ZOC8註冊碼最新 ZOC8破解下載2023-10-31
- Nebulosity 4 for Mac(攝像頭影像捕捉工具) v4.4.4註冊啟用版2021-01-19Mac
- 你的開發利器Spring自定義註解2020-11-12Spring
- VMware註冊碼2018-10-18
- winform註冊功能2019-01-08ORM
- Eureka註冊中心2024-03-20
- 註冊中心-consul2024-03-19
- IJCNN註冊流程2020-05-11CNN
- PhpStorm註冊碼2020-04-07PHPORM
- PHP註冊功能2021-09-09PHP
- 註冊中心consul2022-11-11
- Spring元件註冊2021-02-15Spring元件
- 實現類的註冊方法2024-04-21
- GoDaddy註冊域名的優勢2020-03-26Go
- 我對註冊中心的理解2021-01-14
- IMS註冊流程的解讀2024-12-08
- 五種影像標註的簡介2020-09-10