首页
社区
课程
招聘
[求助]IDA的问题
发表于: 2005-2-9 10:13 5645

[求助]IDA的问题

2005-2-9 10:13
5645
各位老大,先给大家拜年了,我初学IDA,试着用IDA反汇编,并试着重新编译,我的汇编太差,编译不出来,那位老大帮我改改.:)谢谢
.386
.model flat,stdcall
option casemap:none
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib

.const
         
;------------------------------------------------------------------------------
;                                    DATA
;------------------------------------------------------------------------------
.data
; Segment type: Pure data
; Segment permissions: Read/Write
DATA            segment para public 'DATA' use32
                 assume cs:DATA
                 ;org 402000h
; WNDCLASSA WndClass
WndClass         dd 0
                 dd 0                    ; style ; DATA XREF: start+Cw
                                         ; start+7Eo ...
                 dd 0                    ; lpfnWndProc
                 dd 0                    ; cbClsExtra
                 dd 0                    ; cbWndExtra
                 dd 0                    ; hInstance
                 dd 0                    ; hIcon
                 dd 0                    ; hCursor
                 dd 0                    ; hbrBackground
                 dd 0                    ; lpszMenuName
                 dd 0                    ; lpszClassName
; struct tagMSG Msg

hInstance       dd 0                    ; DATA XREF: start+7w
                                        ; start+34r ...
; HWND hWndParent
hWndParent      dd 0                    ; DATA XREF: start+BBw
                                        ; start+CAr ...

dword_402050    dd 0                    ; DATA XREF: start+121w
; char WindowName[]
WindowName      db 'PhoX',27h,'s CrackMe 3.0',0 ; DATA XREF: start+AAo
; char ClassName[]
ClassName       db 'ASMClass',0         ; DATA XREF: start+74o
                                        ; start+AFo
; char aEdit[]
aEdit           db 'Edit',0             ; DATA XREF: start+E2o
; char aOk[]
aOk             db 'Ok',0               ; DATA XREF: start+110o
; char aButton[]
aButton         db 'Button',0           ; DATA XREF: start+115o
; char Caption[]
Caption         db 'Nice Work!!',0      ; DATA XREF: sub_401159+A7o
; char Text[]
Text            db 'Right Code! ',0     ; DATA XREF: sub_401159+ACo
; char String[]
String          db 28h dup(0)           ; DATA XREF: sub_401159+3Do
                                        ; sub_401159+4Do
; char aSorry___Hehehe[]
aSorry___Hehehe db 'Sorry...(hehehe)',0 ; DATA XREF: sub_401159+C5o
; char aWrongCode[]
aWrongCode      db 'Wrong Code!',0      ; DATA XREF: sub_401159+CAo

;------------------------------------------------------------------------------
;                                      CODE
;------------------------------------------------------------------------------
.code
                 public start
start           proc near
                local @stWndClass:WNDCLASSEX
               
                 push    0               ; lpModuleName
                 call    GetModuleHandleA
                 mov     ds:hInstance, eax
                 mov     @stWndClass.style, 4003h
                 mov     @stWndClass.lpfnWndProc, offset sub_401159
                 mov     @stWndClass.cbClsExtra, 0
                 mov     @stWndClass.cbWndExtra, 0
                 mov     eax, ds:hInstance
                 mov     @stWndClass.hInstance, eax
                 push    7F04h           ; lpIconName
                 push    0               ; hInstance
                 call    LoadIconA
                 mov     @stWndClass.hIcon, eax
                 push    7F00h           ; lpCursorName
                 push    0               ; hInstance
                 call    LoadCursorA
                 mov     @stWndClass.hCursor, eax
                 mov     @stWndClass.hbrBackground, 0Bh
                 mov     @stWndClass.lpszMenuName, 0
                 mov     @stWndClass.lpszClassName, offset ClassName ; "ASMClass"
                 push    offset WndClass ; lpWndClass
                 call    RegisterClassA
                 push    0               ; lpParam
                 push    hInstance    ; hInstance
                 push    0               ; hMenu
                 push    0               ; hWndParent
                 push    50h             ; nHeight
                 push    0C8h            ; nWidth
                 push    8000h           ; Y
                 push    8000h           ; X
                 push    104B0000h       ; dwStyle
                 push    offset WindowName ; lpWindowName
                 push    offset ClassName ; lpClassName
                 push    0               ; dwExStyle
                 call    CreateWindowExA
                 mov     ds:hWndParent, eax
                 push    0               ; lpParam
                 push    ds:hInstance    ; hInstance
                 push    10h             ; hMenu
                 push    ds:hWndParent   ; hWndParent
                 push    12h             ; nHeight
                 push    0A0h            ; nWidth
                 push    5               ; Y
                 push    0Fh             ; X
                 push    50800000h       ; dwStyle
                 push    0               ; lpWindowName
                 push    offset aEdit    ; lpClassName
                 push    0               ; dwExStyle
                 call    CreateWindowExA
                 mov     ds:hWnd, eax
                 push    0               ; lpParam
                 push    ds:hInstance    ; hInstance
                 push    20h             ; hMenu
                 push    ds:hWndParent   ; hWndParent
                 push    14h             ; nHeight
                 push    2Eh             ; nWidth
                 push    19h             ; Y
                 push    3Eh             ; X
                 push    50800001h       ; dwStyle
                 push    offset aOk      ; lpWindowName
                 push    offset aButton  ; lpClassName
                 push    0               ; dwExStyle
                 call    CreateWindowExA
                 mov     ds:dword_402050, eax

loc_401126:                             ; CODE XREF: start+150j
                 push    0               ; wMsgFilterMax
                 push    0              ; wMsgFilterMin
                 push    0              ; hWnd
                 push    offset Msg      ; lpMsg
                 call    GetMessageA
                 cmp     ax, 0
                 jz      short loc_401152
                 push    offset Msg      ; lpMsg
                 call    TranslateMessage
                 push    offset Msg      ; lpMsg
                 call    DispatchMessageA
                 jmp     short loc_401126
; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
loc_401152:                             ; CODE XREF: start+13Aj
                 invoke    ExitProcess,NULL
start           endp

; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
; Attributes: bp-based frame

sub_401159      proc near               ; DATA XREF: start+16o
hWnd            = dword ptr  8
Msg             = dword ptr  0Ch
wParam          = dword ptr  10h
lParam          = dword ptr  14h

                 enter   0, 0
                 push    ebx
                 push    edi
                 push    esi
                 cmp     [ebp+Msg], 111h
                 jz      short loc_40118B
                 cmp     [ebp+Msg], 2
                 jz      loc_40123C
                 push    [ebp+lParam]    ; lParam
                 push    [ebp+wParam]    ; wParam
                 push    [ebp+Msg]       ; Msg
                 push    [ebp+hWnd]      ; hWnd
                 call    DefWindowProcA
                 pop     esi
                 pop     edi
                 pop     ebx
                 leave
                 retn    10h
; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
loc_40118B:                             ; CODE XREF: sub_401159+Ej
                 cmp     [ebp+wParam], 20h
                 jnz     loc_401233
                 push    esi             ; nMaxCount
                 push    offset String   ; lpString
                 push    ds:hWnd         ; hWnd
                 call    GetWindowTextA
                 mov     ebx, offset String
                 push    ds:hWnd         ; hWnd
                 call    GetWindowTextLengthA
                 mov     esi, eax
                 cmp     esi, 12h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx], 46h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+1], 69h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+3], 72h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+4], 65h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+6], 57h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+7], 6Fh
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+8], 72h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+0Ah], 78h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+0Ch], 53h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+0Dh], 75h
                 jnz     short loc_40121C
                 cmp     byte ptr [ebx+10h], 78h
                 jnz     short loc_40121C
                 push    30h             ; uType
                 push    offset Caption  ; lpCaption
                 push    offset Text     ; lpText
                 push    ds:hWndParent   ; hWnd
                 call    MessageBoxA
                 pop     esi
                 pop     edi
                 pop     ebx
                 leave
                 retn    10h
; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
loc_40121C:                             ; CODE XREF: sub_401159+62j
                                         ; sub_401159+67j ...
                 push    30h             ; uType
                 push    offset aSorry___Hehehe ; lpCaption
                 push    offset aWrongCode ; lpText
                 push    ds:hWndParent   ; hWnd
                 call    MessageBoxA

loc_401233:                             ; CODE XREF: sub_401159+36j
                 xor     eax, eax
                 pop     esi
                 pop     edi
                 pop     ebx
                 leave
                 retn    10h
; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
loc_40123C:                             ; CODE XREF: sub_401159+14j
                 push    0               ; nExitCode
                 call    PostQuitMessage
                 mov     eax, 0
                 pop     esi
                 pop     edi
                 pop     ebx
                 leave
                 retn    10h
sub_401159      endp
                        end start

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 308
活跃值: (362)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
2
谁帮看一下,这是练习ex1001的,谁有源码
2005-2-9 11:41
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3
你是说直接把这个反汇编结果再编译回去?嗯……

sub_401159      proc near               ; DATA XREF: start+16o
hWnd            = dword ptr  8
Msg             = dword ptr  0Ch
wParam          = dword ptr  10h
lParam          = dword ptr  14h

这里似乎不能这么写,改成sub_401159 proc hWnd,Msg,wParam,lParam这样试试。

看它的出错提示是什么,会指出哪一行编译出错的。
2005-2-9 11:53
0
雪    币: 308
活跃值: (362)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
4
改了,还是不得,在命令提示符那里没有提示了,编译出来的.exe老是说出错
2005-2-9 12:02
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
5
最好明确说明一下调用类型stdcall
2005-2-9 12:34
0
游客
登录 | 注册 方可回帖
返回
//