這是一個注冊機的ASM源代碼,能鏈接,能編譯,能產生EXE文件,但就是運行之後根本沒有任何反應,請教大家是怎麼回事?應該怎麼辦?

forgot2000 2008-01-30 10:32:11
.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc
include comctl32.inc
include comdlg32.inc


includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib

dlgproc proto :DWORD,:DWORD,:DWORD,:DWORD

.const
IDD_DLGKEYG equ 1000
IDC_EDTNAME equ 1001
IDC_EDTKEY equ 1004
IDC_BTNKEY equ 1005
IDC_BTNABOUT equ 1006
IDC_BTNEXIT equ 1007
.data
dlgtxt db "KeyGen by aal",0
dlgabout db "keygen by aal for KGM1Tal on 05/14/2006",0
lNameLen dd 0
szError db "Error",0
szNoName db "No name?"
s1 dd 0
s2 dd 0
s3 dd 0
sKey db 0,'E',7 dup(0),0,0
c_1 db "ZWATRQLCGHPSXYENVBJDFKMU",0
.data?
sname db 40 dup(?)
hInstance dd ?
.code
start:
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,eax,IDD_DLGKEYG,NULL,offset dlgproc,0
invoke ExitProcess,NULL

dlgproc proc hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke InitCommonControls
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDC_BTNKEY
invoke RtlZeroMemory,addr sname,40
invoke GetDlgItemText,hWnd,IDC_EDTNAME,addr sname,sizeof sname
mov lNameLen,eax
cmp eax,0
jz _NoName
xor ecx,ecx
xor ebx,ebx
_SumName:
mov al,byte ptr [sname+ecx]
cmp al,0
jz exit1
add bl,al
inc ecx
;cmp ecx,dword ptr [lNameLen]
;jne _SumName
jmp _SumName
exit1:
mov byte ptr [s1],bl
mov eax,dword ptr [s1]
mov ecx,18h
cdq
idiv ecx
mov byte ptr [s2],dl
cmp dl,18h
jbe _char1
sub dl,18h
_char1:
mov byte ptr [s3],dl
movzx edx,dl
mov al,byte ptr [c_1+edx]
mov byte ptr [sKey],al
mov dl,byte ptr [s3]
mov al,dl
add al,dl
cmp al,18h
jbe _char3
sub al,18h
_char3:
mov byte ptr[s3],al
movzx eax,al
mov bl,byte ptr[c_1+eax]
mov byte ptr[sKey+2],bl
mov ecx,3
_gonxt:
mov dl,bl
sub dl,41h
add al,dl
cmp al,18h
jbe _nxtchar
sub al,18h
_nxtchar:
mov byte ptr[s3],al
movzx eax,al
mov bl,byte ptr[c_1+eax]
mov byte ptr[sKey+ecx],bl
inc ecx
cmp ecx,09h
jnz _gonxt
xor ecx,ecx
xor eax,eax
_keysum:
mov bl,byte ptr[sKey+ecx]
movzx ebx,bl
add eax,ebx
inc ecx
cmp ecx,09h
jne _keysum
;mov ecx,09h
cdq
idiv ecx
mov byte ptr[sKey+9],al
invoke SetDlgItemText,hWnd,IDC_EDTKEY,addr sKey
jmp _OK
_NoName:
invoke MessageBox,hWnd,addr szNoName,addr szError,MB_OK
_OK:

.elseif eax == IDC_BTNABOUT
invoke MessageBox,hWnd,addr dlgabout,addr dlgtxt,MB_OK
.elseif eax == IDC_BTNEXIT
invoke EndDialog,hWnd,NULL
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
dlgproc endp

end start

使用Masm32 v9編譯,鏈接編譯批處理文件如下:
@echo off
path=d:\masm32\bin;%path%
set include=d:\masm32\include;
set lib=d:\masm32\lib;
ml /c /coff smallKeyg.asm
link /subsystem:windows smallKeyg.obj
pause
...全文
87 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2008-01-30
  • 打赏
  • 举报
回复
//沒有VC6,是否可以用計事本編輯?

可以,你可以用资源工具提取exe中的资源信息。

或者将你源代码中的注册算法放到dll中实现算法与界面分离。
forgot2000 2008-01-30
  • 打赏
  • 举报
回复
應該怎麼寫,又現成的例子嗎?沒有VC6,是否可以用計事本編輯?
大熊猫侯佩 2008-01-30
  • 打赏
  • 举报
回复
0 手动编写 .rc 文件,然后用 masm 自带的 rc.exe 生成 .res 文件

1 用 vc 6.0 的资源生成器
forgot 2008-01-30
  • 打赏
  • 举报
回复
請問應該如何寫資源文件,原作者並沒有提供資源文件,隻有ASM源碼以及編譯之後EXE文件,截圖如下:


都是標準的Windows控件,請問此資源文件如何制作?或者是否可以從EXE文件中提取出來?
zara 2008-01-30
  • 打赏
  • 举报
回复
还少定义对话框的资源文件, 没有该资源文件的话, DialogBoxParam() 函数会出错直接返回, 所以就立即退出程序了而没有什么其它的表现
forgot2000 2008-01-30
  • 打赏
  • 举报
回复
是的,這個問題我剛解決,從MASM32的resource.h中查到了ES_READONLY常量值。謝謝大家。
zara 2008-01-30
  • 打赏
  • 举报
回复
....
EDITTEXT IDC_EDTKEY,43,25,105,14, 0X800
END

// OX800 = ES_READONLY, 即 EDIT 类窗口的只读模式.
// 如果是直接使用 ES_READONLY 的话, 则需要在开始处 #include "resource.h"
forgot 2008-01-30
  • 打赏
  • 举报
回复
自己寫了一個,但最後有一個小問題,如何設置某個Edit輸入框為“隻讀”,就是灰色不可輸入狀態。
#define IDD_DLGKEYG 1000
#define IDC_EDTNAME 1001
#define IDC_EDTKEY 1004
#define IDC_BTNKEY 1005
#define IDC_BTNABOUT 1006
#define IDC_BTNEXIT 1007
#define IDC_STATIC -1

IDD_DLGKEYG DIALOGEX 6, 6, 194, 74
STYLE 0x10CF0800
EXSTYLE 0x00000008
CAPTION "KeyGen for KGM1Tal by aal"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "&KeyGen",IDC_BTNKEY,13,51,40,15
PUSHBUTTON "&About",IDC_BTNABOUT,73,51,40,15
PUSHBUTTON "E&xit",IDC_BTNEXIT,132,51,40,15
LTEXT "Name:",IDC_STATIC,12,9,28,9
LTEXT "Key:",IDC_STATIC,13,28,28,9
EDITTEXT IDC_EDTNAME,44,7,105,14
EDITTEXT IDC_EDTKEY,43,25,105,14
END
嗷嗷叫的老马 2008-01-30
  • 打赏
  • 举报
回复
.........
forgot2000 2008-01-30
  • 打赏
  • 举报
回复
不好意思,說得再多,沒有具體例子,還是不知道該怎麼做。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧