WIN32汇编-反汇编

 学好WIN32汇编,平时需要多阅读编译器生成的汇编代码,因为编译器生成的代码是最规范和最优化的,从中可以学到汇编编程和语句优化的技巧。

    如何得到一个程序的反汇编代码呢?使用反汇编软件,不是使用DOS的DEBUG,WINIODWS平台上已经有多反汇编软件,读者可以从下面的地址中下载反汇编软件
下载示例分析文件GetID硬件特征码程序: http://www.91now.com/down/soft/137021.htm
   下面列出了取得硬件特征码程序的反汇编源代码,笔者将在随后对它进行分析:
Disassembly of File: D:\My Documents\GetID.exe
Code Offset = 00000400, Code Size = 00000200
Data Offset = 00000800, Data Size = 00000600
Number of Objects = 0004 (dec), Imagebase = 00400000h
   Object01:.text    RVA:00001000 Offset: 00000400 Size: 00000200 Flags: 60000020
   Object02:.rdata   RVA: 00002000 Offset:00000600 Size: 00000200 Flags: 40000040
   Object03:.data    RVA:00003000 Offset: 00000800 Size: 00000600 Flags: C0000040
   Object04:.rsrc    RVA:00004000 Offset: 00000E00 Size: 00002A00 Flags: C0000040

+++++++++++++++++++  菜单信息   ++++++++++++++++++
                程序没有菜单选项                     
+++++++++++++++++    对话框信息    ++++++++++++++++++
       There Are No Dialog Resources in This Application
+++++++++++++++++++     导入函数     ++++++++++++++++++
Number of Imported Modules=    2(decimal)
   Import Module 001:user32.dll
   Import Module 002:kernel32.dll
+++++++++++++++++++     重要模块资料    +++++++++++++++
   Import Module 001:user32.dll
 Addr:0000206C hint(019D) Name:MessageBoxA
   Import Module 002:kernel32.dll
 Addr:000020A6 hint(0080) Name:ExitProcess
 Addr:00002086 hint(0030) Name: CreateFileA
 Addr:00002094 hint(005A) Name:DeviceIoControl
+++++++++++++++++++     导出函数     ++++++++++++++++++
Number of Exported Functions = 0000 (decimal)
 

+++++++++++++++++++ ASSEMBLY CODE LISTING ++++++++++++++++++
//********************** Start of Code in Object .text**************
Program Entry Point = 00401000 (D:\My Documents\GetID.exe FileOffset:00001600)
 
//******************** Program Entry Point ********
:00401000B801000000             mov eax, 00000001
:004010050FA2                   cpuid
:00401007BEB7304000             mov esi, 004030B7
:0040100C50                     push eax
:0040100DE8E7000000             call 004010F9
:004010128906                   mov dword ptr [esi], eax
:0040101453                     push ebx
:00401015E8DF000000             call 004010F9
:0040101A894604                 mov dword ptr [esi+04], eax
:0040101D51                     push ecx
:0040101EE8D6000000             call 004010F9
:00401023894608                 mov dword ptr [esi+08], eax
:0040102652                     push edx
:00401027E8CD000000             call 004010F9
:0040102C89460C                 mov dword ptr [esi+0C], eax
:0040102FBF54304000             mov edi, 00403054
:00401034B910000000             mov ecx, 00000010
:00401039AC                     lodsb
:0040103AE8D9000000             call 00401118
:0040103F66AB                   stosw
:00401041E2F6                   loop 00401039
:004010436A00                   push 00000000
:004010456A00                   push 00000000
:004010476A03                   push 00000003
:004010496A00                   push 00000000
:0040104B6A03                   push 00000003
:0040104D68000000C0             push C0000000
* Possible StringData Ref from Data Obj->" \\.\PhysicalDrive0"
                                 |
:0040105268A0304000             push 004030A0
* Reference To: kernel32.CreateFileA, Ord:0030h
                                 |
:00401057E8DE000000             Call 0040113A
:0040105CA3B3304000             mov dword ptr [004030B3], eax
:00401061BBC7304000             mov ebx, 004030C7
:00401066C70300020000           mov dword ptr [ebx], 00000200
:0040106CC7430400010100         mov [ebx+04], 00010100
:00401073C7430800A0EC00         mov [ebx+08], 00ECA000
:0040107AC7430C00000000         mov [ebx+0C], 00000000
:00401081BBF7334000             mov ebx, 004033F7
:00401086C70312000000           mov dword ptr [ebx], 00000012
:0040108CC74304EC000000         mov [ebx+04], 000000EC
:00401093C7430801010001         mov [ebx+08], 01000101
:0040109AC7430C07000000         mov [ebx+0C], 00000007
:004010A16A00                   push 00000000
:004010A368F7334000             push 004033F7
:004010A86813020000             push 00000213
:004010AD68F7304000             push 004030F7
:004010B26A23                   push 00000023
:004010B468C7304000             push 004030C7
:004010B96888C00700             push 0007C088
:004010BEFF35B3304000           push dword ptr [004030B3]
* Reference To: kernel32.DeviceIoControl, Ord:005Ah
                                 |
:004010C4E877000000             Call 00401140
:004010C9BE1B314000             mov esi, 0040311B
:004010CEBF28304000             mov edi, 00403028
:004010D3B90A000000             mov ecx, 0000000A
:004010D866AD                   lodsw
:004010DA86C4                   xchg ah, al
:004010DC66AB                   stosw
:004010DEE2F8                   loop 004010D8
:004010E06A00                   push 00000000
* Possible StringData Ref from Data Obj->"本机硬件ID:"
                                 |
:004010E26800304000             push 00403000

* Possible StringData Ref from Data Obj->"你的硬件ID是:

硬盘ID:   "
                                       ->"                           

 "
                                       ->"CpuID:                      "
                                       ->"          

小技巧:你可以按 "
                                       ->"Ctrl+C 复制本框内容!"
                                 |
:004010E7680E304000             push 0040300E
:004010EC6A00                   push 00000000

* Reference To: user32.MessageBoxA, Ord:019Dh
                                 |
:004010EEE841000000             Call 00401134
:004010F350                     push eax

* Reference To: kernel32.ExitProcess, Ord:0080h
                                 |
:004010F4E84D000000             Call 00401146

* Referenced by a CALL at Addresses:
|:0040100D   ,:00401015   ,:0040101E   ,:00401027  
|
:004010F955                     push ebp
:004010FA8BEC                   mov ebp, esp
:004010FC53                     push ebx
:004010FD51                     push ecx
:004010FE8B4508                 mov eax, dword ptr [ebp+08]
:00401101B903000000             mov ecx, 00000003
:004011068AD8                   mov bl, al
:00401108C1E808                 shr eax, 08
:0040110BC1E308                 shl ebx, 08
:0040110EE2F6                   loop 00401106
:004011108BC3                   mov eax, ebx
:0040111259                     pop ecx
:004011135B                     pop ebx
:00401114C9                     leave
:00401115C20400                 ret 0004

 

* Referenced by a CALL at Address:
|:0040103A  
|
:004011188AE0                   mov ah, al
:0040111AC0E804                 shr al, 04
:0040111D80E40F                 and ah, 0F
:0040112080FC0A                 cmp ah, 0A
:004011237203                   jb 00401128
:0040112580C407                 add ah, 07

* Referenced by a (U)nconditional or (C)onditional Jump atAddress:
|:00401123(C)
|
:004011283C0A                   cmp al, 0A
:0040112A7202                   jb 0040112E
:0040112C0407                   add al, 07

* Referenced by a (U)nconditional or (C)onditional Jump atAddress:
|:0040112A(C)
|
:0040112E66053030               add ax, 3030
:00401132C3                     ret


:00401133CC                     int 03

* Referenced by a CALL at Address:
|:004010EE  
|

* Reference To: user32.MessageBoxA, Ord:019Dh
                                 |
:00401134FF2510204000           Jmp dword ptr [00402010]

* Referenced by a CALL at Address:
|:00401057  
|

* Reference To: kernel32.CreateFileA, Ord:0030h
                                 |
:0040113AFF2504204000           Jmp dword ptr [00402004]

* Referenced by a CALL at Address:
|:004010C4  
|

* Reference To: kernel32.DeviceIoControl, Ord:005Ah
                                 |
:00401140FF2508204000           Jmp dword ptr [00402008]

* Reference To: kernel32.ExitProcess, Ord:0080h
                                 |
:00401146FF2500204000           Jmp dword ptr [00402000]
:0040114C00000000000000000000   BYTE 10 DUP(0)
:0040115600000000000000000000   BYTE 10 DUP(0)
:0040116000000000000000000000   BYTE 10 DUP(0)
:0040116A00000000000000000000   BYTE 10 DUP(0)
:0040117400000000000000000000   BYTE 10 DUP(0)
:0040117E00000000000000000000   BYTE 10 DUP(0)
:0040118800000000000000000000   BYTE 10 DUP(0)
:0040119200000000000000000000   BYTE 10 DUP(0)
:0040119C00000000000000000000   BYTE 10 DUP(0)
:004011A600000000000000000000   BYTE 10 DUP(0)
:004011B000000000000000000000   BYTE 10 DUP(0)
:004011BA00000000000000000000   BYTE 10 DUP(0)
:004011C400000000000000000000   BYTE 10 DUP(0)
:004011CE00000000000000000000   BYTE 10 DUP(0)
:004011D800000000000000000000   BYTE 10 DUP(0)
:004011E200000000000000000000   BYTE 10 DUP(0)
:004011EC00000000000000000000   BYTE 10 DUP(0)
:004011F600000000000000000000   BYTE 10 DUP(0)

 有经验的程序员都知道,看别人代码是写代码必练的基本功,下面笔者和大家一起来看懂这段看似天书的汇编代码。

* Referenced by a CALL at Addresses:
|:0040100D   ,:00401015   ,:0040101E   ,:00401027  
|
:004010F955                     push ebp
:004010FA8BEC                   mov ebp, esp
:004010FC53                     push ebx
:004010FD51                     push ecx
:004010FE8B4508                 mov eax, dword ptr [ebp+08]
:00401101B903000000             mov ecx, 00000003
:004011068AD8                   mov bl, al
:00401108C1E808                 shr eax, 08
:0040110BC1E308                 shl ebx, 08
:0040110EE2F6                   loop 00401106
:004011108BC3                   mov eax, ebx
:0040111259                     pop ecx
:004011135B                     pop ebx
:00401114C9                     leave
:00401115C20400                 ret 0004
 
这是一段子程序,:0040100D   ,:00401015   ,:0040101E   ,:00401027 都对它进行了调用。所以先对这个子程序进行研究
:004010FE8B4508                 mov eax, dword ptr [ebp+08]
:00401101B903000000             mov ecx, 00000003
:004011068AD8                   mov bl, al
:00401108C1E808                 shr eax, 08
:0040110BC1E308                 shl ebx, 08
:0040110EE2F6                   loop 00401106
:004011108BC3                   mov eax, ebx
可以这个是一个循环,一循环三次
目的是将eax的值以字节为单位,反过来存放,存储器以字节为单位进行存储,对于字(16位),将要低8位放在低位地址,将高8位放在高位地址,因为存储器的地址单元是增加方向增长的,所以先将低8位放在ah,再将高8位取出放在AL,所以要反序取出。
ret指令返回并将调用者存放在堆栈中的返回地址弹出到EIP中,如果是段间调用的返回,弹出到CS:EIP
call执行的功能(段间),按顺序如下:
1、将CS寄存器中的值压入堆栈
2、把CALL指令的下条指令的32位偏移地址压入堆栈
3、拷贝48位的有效地址到CS:EIP
4、程序从了程序的第一条指令处开始执行
二、ret 立即数  
这种方式是指把返回地址弹出堆栈后,把该值与esp加,相当于堆栈顶去掉了若干字节的内容
 

* Referenced by a CALL at Address:
|:0040103A  
|
:004011188AE0                   mov ah, al
:0040111AC0E804                 shr al, 04
:0040111D80E40F                 and ah, 0F
:0040112080FC0A                 cmp ah, 0A
:004011237203                   jb 00401128
:0040112580C407                 add ah, 07

因为al中放了参数,所以将EAX的AL中的高4位移到ah中,要达到以十六进制显示,并且ASCII码为8位,所以进行了扩展,并且将十六进制码转化为ASCII码,

* Referenced by a (U)nconditional or (C)onditional Jump atAddress:
|:00401123(C)
|
:004011283C0A                   cmp al, 0A
:0040112A7202                   jb 0040112E
:0040112C0407                   add al, 07

* Referenced by a (U)nconditional or (C)onditional Jump atAddress:
|:0040112A(C)
|
:0040112E66053030               add ax, 3030
:00401132C3                     ret

以上完成将al由数字或字符分别转化成相应的两个ASCII码。

 

存储器以字节为单位进行存储,对于字(16位),将要低8位放在低位地址,将高8位放在高位地址,因为存储器的地址单元是增加方向增长的,且字的存储地址是低地址,取CPU序列号时,以4位为单位,所以先将低4位AL的低4位中,再将高4取出放在AL的高4位中,因此,这个子程序将AL的高位和低位调换过来,以还原正常。

 
 
//******************** Program Entry Point ********
:00401000B801000000             mov eax, 00000001
:004010050FA2                   cpuid
 
取得cpuid,从低32位到高32位放在eax,ebx,ecx,edx,

:00401007BEB7304000             mov esi, 004030B7
:0040100C50                     push eax
:0040100DE8E7000000             call 004010F9
:004010128906                   mov dword ptr [esi], eax
:0040101453                     push ebx
:00401015E8DF000000             call 004010F9
:0040101A894604                 mov dword ptr [esi+04], eax
:0040101D51                     push ecx
:0040101EE8D6000000             call 004010F9
:00401023894608                 mov dword ptr [esi+08], eax
:0040102652                     push edx
:00401027E8CD000000             call 004010F9
:0040102C89460C                 mov dword ptr [esi+0C], eax
调用子程序对CPUID进行反序,以还原正常的数值,因为存储将高位放在高地址,低位放在低地址。
:0040102FBF54304000             mov edi, 00403054
:00401034B910000000             mov ecx, 00000010
:00401039AC                     lodsb
:0040103AE8D9000000             call 00401118
:0040103F66AB                   stosw
:00401041E2F6                   loop 00401039
用4位单位进一步反序CPUID,并转化为ASCII码。
:004010436A00                   push 00000000
:004010456A00                   push 00000000
:004010476A03                   push 00000003
:004010496A00                   push 00000000
:0040104B6A03                   push 00000003
:0040104D68000000C0             push C0000000
* Possible StringData Ref from Data Obj->" \\.\PhysicalDrive0"
                                 |
:0040105268A0304000             push 004030A0
放置调用API的参数,最后入堆栈的参数是第一个参数
* Reference To: kernel32.CreateFileA, Ord:0030h
                                 |
:00401057E8DE000000             Call 0040113A
0040105CA3B3304000             mov dword ptr [004030B3], eax
:00401061BBC7304000             mov ebx, 004030C7
以下是二个变量的赋值
:00401066C70300020000           mov dword ptr [ebx], 00000200
:0040106CC7430400010100         mov [ebx+04], 00010100
:00401073C7430800A0EC00         mov [ebx+08], 00ECA000
:0040107AC7430C00000000         mov [ebx+0C], 00000000
:00401081BBF7334000             mov ebx, 004033F7
:00401086C70312000000           mov dword ptr [ebx], 00000012
:0040108CC74304EC000000         mov [ebx+04], 000000EC
:00401093C7430801010001         mov [ebx+08], 01000101
:0040109AC7430C07000000         mov [ebx+0C], 00000007
以下放置参数,调用API,取硬盘ID
:004010A16A00                   push 00000000
:004010A368F7334000             push 004033F7
:004010A86813020000             push 00000213
:004010AD68F7304000             push 004030F7
:004010B26A23                   push 00000023
:004010B468C7304000             push 004030C7
:004010B96888C00700             push 0007C088
:004010BEFF35B3304000           push dword ptr [004030B3]
* Reference To: kernel32.DeviceIoControl, Ord:005Ah
                                 |
:004010C4E877000000             Call 00401140
以下将取出的硬盘ID反序,以还原正常
:004010C9BE1B314000             mov esi, 0040311B
:004010CEBF28304000             mov edi, 00403028
:004010D3B90A000000             mov ecx, 0000000A
:004010D866AD                   lodsw
:004010DA86C4                   xchg ah, al
:004010DC66AB                   stosw
:004010DEE2F8                   loop 004010D8
:004010E06A00                   push 00000000
* Possible StringData Ref from Data Obj->"本机硬件ID:"
                                 |
:004010E26800304000             push 00403000

* Possible StringData Ref from Data Obj->"你的硬件ID是:

硬盘ID:   "
                                       ->"                           

 "
                                       ->"CpuID:                      "
                                       ->"          

小技巧:你可以按 "
                                       ->"Ctrl+C 复制本框内容!"
                                 |
:004010E7680E304000             push 0040300E
:004010EC6A00                   push 00000000

* Reference To: user32.MessageBoxA, Ord:019Dh
 调用API显示ID

                                |
:004010EEE841000000             Call 00401134
:004010F350                     push eax

* Reference To: kernel32.ExitProcess, Ord:0080h
                                 |
:004010F4E84D000000             Call 00401146

                ret

程序退出
:00401133CC                     int 03

* Referenced by a CALL at Address:
|:004010EE  
|

* Reference To: user32.MessageBoxA, Ord:019Dh
                                 |
:00401134FF2510204000           Jmp dword ptr [00402010]

* Referenced by a CALL at Address:
|:00401057  
|

* Reference To: kernel32.CreateFileA, Ord:0030h
                                 |
:0040113AFF2504204000           Jmp dword ptr [00402004]

* Referenced by a CALL at Address:
|:004010C4  
|

* Reference To: kernel32.DeviceIoControl, Ord:005Ah
                                 |
:00401140FF2508204000           Jmp dword ptr [00402008]

* Reference To: kernel32.ExitProcess, Ord:0080h
                                 |
:00401146FF2500204000           Jmp dword ptr [00402000]
:0040114C00000000000000000000   BYTE 10 DUP(0)
:0040115600000000000000000000   BYTE 10 DUP(0)
:0040116000000000000000000000   BYTE 10 DUP(0)
:0040116A00000000000000000000   BYTE 10 DUP(0)
:0040117400000000000000000000   BYTE 10 DUP(0)
:0040117E00000000000000000000   BYTE 10 DUP(0)
:0040118800000000000000000000   BYTE 10 DUP(0)
:0040119200000000000000000000   BYTE 10 DUP(0)
:0040119C00000000000000000000   BYTE 10 DUP(0)
:004011A600000000000000000000   BYTE 10 DUP(0)
:004011B000000000000000000000   BYTE 10 DUP(0)
:004011BA00000000000000000000   BYTE 10 DUP(0)
:004011C400000000000000000000   BYTE 10 DUP(0)
:004011CE00000000000000000000   BYTE 10 DUP(0)
:004011D800000000000000000000   BYTE 10 DUP(0)
:004011E200000000000000000000   BYTE 10 DUP(0)
:004011EC00000000000000000000   BYTE 10 DUP(0)
:004011F600000000000000000000   BYTE 10 DUP(0)

两款Windows平台反汇编利器Hiew与Win32Dasm深度解析 Hiew 和 Win32Dasm 或许已经不再主流,但它们所体现的工程哲学——简洁、专注、贴近底层——永远不会过时。在这个AI自动生成反编译代码的时代,我们更需要回归本质:理解字节是如何流动的,寄存器是如何变化的,内存是如何映射的。因为只有掌握了这些,你才能真正掌控逆向的方向盘,而不是被动跟随工具的输出结果。所以,下次当你面对一个新的二进制文件时,不妨先放下IDA,打开Hiew,看看那一排排十六进制数字背后,藏着怎样的故事。🔍✨毕竟,每一个90,都曾是一个梦想的起点。 阅读详情

相关推荐

w32dsm

w32dsm

W32Dasm反编译教程+工具

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 给大家转一个...

weixin_44416695的博客 2560

w32dsm静态反汇编工具

W32Dasm是一个静态反汇编工具,也是破解人常用的工具之一,它也被比   作破解人的屠龙刀。   W32Dasm10.0修改版是经Killer在W32Dasm8.93基础上修改的,修改后的   W32Dasm功能更强大,能完美显示中文字符串及VB程序,内含16进制编辑   器,破解修改软件更容易,真可谓是反汇编极品!

强大的W32Dasm反汇编工具使用教程

W32Dasm是一个强大的反汇编工具,操作简单,使用方便。通常被程序员使用,当然也可被用来Crack软件了,很适合Cracker使用。我在这把与crack相关的功能简述如下: 1.0 开始 2.0 保存反汇编文本文件和创建方案文件 3.0 反汇编文本代码的基本操作 4.0 复制汇编代码文本 5.0 装载32位的汇编代码动态调试 6.0 运行,暂停或终止程序 7.0 单步跟踪程序

Jave.Lin 的学习笔记 7998

W32DSM 无极版 v3.0.EXE

W32DSM 无极版 v3.0.exe

w32dsm 汇编

w32dsm1、修正第一版本(2000.9.5): 修改者:kuangren 可以同时对付VB/DELPHI,而且提取字符能力更高,同时减少了无效字符的提取 2、修正第二版本: 修改者:bpx 解决反汇编有中文字串的软件时,中文串都以乱码显示问题。 3、修正第三版本 (by Killer http://nfans.net/) 1)、自定义语法高亮显示的色彩,某些关键字可以用突出颜色显示,Good! 2)、可以手工增加注释,类似IDA,注释可以复制、保存。更加方便分析和写破解文章! 3)、增强的搜索、查找功能! 4)、命令行功能! 5)、增加最新使用文件列表功能! 6)、相当实用的快速编辑功能,可以取代HEX编辑器了! Cool:) 7)、增加汇编代码修补(Permenant Patcher)功能! 8)、打开当前反汇编文件写操作! 9)、本版修正两个窗口不能正常显示的BUG。 10)、在反汇编窗口显示显示中文的功能! 11)、在串式数据参考中提取中文字符串的功能! 12)、支持VB/DELPHI字符串的提取,可以自定义VB_patch的打开和关闭 ======================================================== 这中间有众多修改版本,我也记不清,欢迎补充。 ======================================================== 4、W32dsm8.93+ 修改者:pll621 支持滚轮鼠标的滚动和文件的拖放打开。 在串式参考、输入表、输出表等窗口增加了字串查找功能,非常实用。 添加右键功能: 右健双击弹出search菜单 按住右键不放点击左键弹出打开文件菜单 更改滚动速度跳三行 增加区域判断在原来能跳转回去的那一行不弹出右键菜单而是实现原来的双击的功能,其他地方单击右键弹出菜单。 右键菜单在W32Dasm(20020827)版的基础上增加cemment,hexedit,和goto localtion三个经常用的。

Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用

前言 时间:2020.8.8,一直想学逆向工程,刚好最近时间比较充足,每天除了刷算法题也可以学逆向了 . . . 此系列文章都是一些基础的文章,通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 文章目录 OD介绍 全局变量赋值的反汇编形式(包含) 函数调用的反汇编形式 加法计算与内存单元长度的修饰讲解 OD介绍 在研究反汇编之前,我们先来了解一下以后会一直用的神器: Ollydbg 1. Ollydbg 简介 Ollydbg 用作动态调试,一.

浪子花梦 3188

反汇编软件(w32dsm8.93)

w32Dasm是一款出色的反汇编工具,其小巧、免费、速度快等特点,使其得到广大网友喜爱,但由于其官方最后的版本是8.93,不再升级,因此众多才华横溢的解密爱好者将w32Dasm改进修正,不断提高其功能和易用性。 W32dsm89.exe 英文原版 Gold.exe 黄金版中文版 W32dsm8.93+.exe pll621在Killer版本基础上修改 ANTI-WDasm.exe 在黄金版基础上修改彻底解决ANTI版 by yaoyuan[CCG]

Win32窗口相关API反汇编

1、Win32应用程序入口识别 /*程序入口*/ //APIENTRY(API入口) __stdcall int APIENTRY WinMain(HINSTANCE hInstance, //ImageBase HINSTANCE hPrevInstance, //NULL LPSTR lpCmdLine, //命令行参数,可以用Debug版打印,也可以使用Release版使用Dbgview.exe查看 int nCmdShow) //指定程序窗口如何显示 看到KERNEL32.GetVer

Hello_MyDream的博客 2万+

W32dsm 静态调试的屠龙刀

W32dsm是一个静态反汇编工具,也是破解人常用的工具之一,它也被比作破解人的屠龙刀。 W32dsm主要用于破解软件时静态跟踪,非常容易上手

一很好的反汇编工具W32asm

可把EXE文件反汇编成汇编语言,也可再上面调试操作

win32反汇编初步探索及Onllydbg的使用

实验项目 win32反汇编 综合性实验 2020年11月25日 一、实验综述 1.实验目的及要求 (1)掌握C语言定义全局变量的基本原理 (2)掌握Ollydbg分析工具的使用 (3)在C语言源代码中添加MessageBox代码来定位全局变量赋值语句 (4)分析OD中反汇编窗口及堆栈窗口代码,寻找反汇编代码中的赋值语句 2.实验仪器、设备或软件 Ollydbg Visual Studio 2015 3.实验原理 (1)Ollydbg简介 Ollydbg是汇编级的调试器,我们使用的VS是...

fencecat的博客 956

反汇编分析利器

w32Dasm是一款出色的静态反汇编工具,其小巧、免费、速度快等特点,使其得到 广大网友喜爱,但由于其官方最后的版本是8.93,不再升级,因此众多解密爱好者将 w32Dasm改进修正,不断提高其功能和易用性。w32Dasm 无极版是一款在众多w32Dasm 版本中比较不错的版本,可以说是反汇编极品。 原英文版主要特点如下: 1)、"代码着色"选项可自定义语法高亮显示的色彩,某些关键字可以用突出颜色显示,Good! 如颜色修改乱了,可删除系统安装盘\windows\下的w32dasm8.ini文件即可还原到缺省颜色。 2)、可以手动增加注释和过程说明,类似IDA,注释和过程说明可以复制、保存。分析和写破解文章更加方便! 3)、增强的搜索、查找功能! 4)、命令行功能!你可以使用鼠标右键"发送到" 功能了。 5)、支持滚轮鼠标操作。 6)、相当实用的快速编辑功能,可以取代HEX编辑器进行代码补丁! Cool:) 7)、方便实用的右键"转到参考"功能,只要将光标移至参考地址处,在弹出的右键菜单中,单击"转到参考", 就可转至相应代码处; 8)、支持中文字符串功能! ....... 汉化修改版新增及修正功能如下: 1)、增加文件拖放功能; 2)、右键菜单增加"查找文本"和"转到代码位置"功能; 3)、修正原英文版由于修改w32dasm反汇编对话框处代码,造成反汇编后许多中文字符串被过滤掉的问题, 不过由于反汇编对话框,软件反ANTI能力相对减弱。 4)、修正原英文版使用快速编辑功能时,不能修改A~F的bug; 5)、修正原英文版使用快速编辑功能时,无论是否点击[应用]按钮,软件都会自动备份原文件的问题。 6)、修复原英文版W32Dsm.dll补丁部分的热键,现在你可以按"ctrl F"调出"查找文本"对话框了。 7)、修正原英文版反汇编有输出表的文件时不显示输出函数的bug。

Win32反汇编(六)C/C++中的循环语句反汇编分析、置增置减反汇编分析与编译器的优化分析

前言 作者:浪子花梦,一个有趣的程序员 ~ 此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 前文链接 Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用 Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令 Win32反汇编(三)深层次的了解各种转移指令:IF语句有符号与无符号跳转 Win32反汇编(四)栈的工作原理与堆栈.

浪子花梦 790

通俗理解Xgboost

为了简化计算,XGBoost采用了一阶导数(梯度)和二阶导数(Hessian)来近似损失函数的变化,从而推导出叶子节点值的更新公式。其中 z 就是所有树的叶子节点分数之和。通过这两个正则化项,XGBoost能够在优化目标函数时,不仅考虑损失函数的最小化,还考虑了模型的复杂度,从而达到更好的泛化性能。正则化项通常包括两个部分:一个是与叶子节点数量相关的项,另一个是与叶子节点输出值大小相关的项。通过这种方式,XGBoost能够有效地计算出每个叶子节点的值,同时通过正则化项来平衡模型的复杂度和泛化能力。

金融风控笔记 751

关于RS485通讯TVS器件选择的经验

先说经验结论 如果你的RS485用于频繁热拔插, 比如作为手持终端使用, 且手持器与目标板非隔离, 那么使用6.8CA可能是更好的选择.因为有热拔插会产生浪涌, 而且在非隔离的场合有些工业设备接地也是无法保障的.对于使用场景较为单一的, 点对点或点对多场合. 可以使用最大峰值脉冲电流较小的SM712.这是在长期的产品设计中得到的经验. 仅供参考 一. TVS的工作原理和作用 瞬态电压抑制二极管 ...

qq_20163075的博客 6510

Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令

前言 作者:浪子花梦,一个有趣的程序员 ~ 此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 前文链接 Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用 文章目录 EAX相关寄存器的结构 MOVSX与MOVZX扩展转移指令 LEA取地址指令 SUB减法指令 CMP与转移指令的配合使用 OD 使用情况小结 ...

浪子花梦 6971

2021秋-北邮计算机导论期末考试(BUPT)

2021秋-北邮计算机导论期末考试(BUPT) 难度较低适合新手练习

weixin_73985779的博客 1499

关于如何用od反汇编win32 控制台程序

<br />***********************************************************<br />如何用od反汇编win32 控制台程序(类似dos程序)呢?<br />***********************************************************<br />注:od是用来调试win32程序的<br /> <br />1.反编译win32 控制台程序,这个跟win32 gui还是有些不同的.2.控制台程序加载时就有控制台窗口

m4nkey 4158

Spyglass实战指南:跨时钟域同步方案深度解析

本文深度解析了Spyglass在跨时钟域同步方案验证中的实战应用。通过真实案例阐述了亚稳态的危害,并详细介绍了从基础的两级同步器到复杂的异步FIFO与握手协议等八大同步方案,以及如何利用Spyglass进行有效配置、检查与问题排查,为提升芯片设计可靠性提供系统性的避坑指南。

weixin_29219189的博客 838

Codex API 直接集成指南:告别中转代理,构建稳定高效的 AI 应用

在 AI 应用开发中,API 集成是连接模型能力与业务逻辑的核心环节。其基本原理是通过 HTTP 协议,按照服务提供商定义的规范发送请求并解析响应,实现远程调用。标准化的 API 设计确保了跨平台和跨语言的互操作性,其技术价值在于提供了稳定、可控且可扩展的服务接入方式,是构建企业级智能应用的基础。在实际应用场景中,开发者常需集成如 Codex 这类聚合了多种大语言模型的平台,以调用诸如 DeepSeek 等先进模型。然而,部分开发者仍依赖过时的第三方中转代理工具,这不仅引入了单点故障和版本锁定的风险,还可能

weixin_28224217的博客 339

Win32反汇编(九)使用SCASB与REPNE、CMPSB与REPZ指令实现对字符串的比较功能

前言 作者:浪子花梦,一个有趣的程序员 ~ 此系列文章都是一些基础的文章,每篇文章都通过几个小例子快速的了解 Win32反汇编与OD的使用,在此作个笔记 如若对您有帮助,记得三连哟 ~ 前文链接 Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用 Win32反汇编(二)几种常见的指令反汇编详解:EAX、MOVSX与MOVZX、LEA、SUB、CMP与转移指令 Win32反汇编(三)深层次的了解各种转移指令:IF语句有符号与无符号跳转 Win32反汇编(四)栈的工作原理与堆栈.

浪子花梦 3044

ESP32-IDF开发实例-外部Flash与FatFs文件系统数据存取

FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I/O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。ESP32-IDF对FatFs提供了良好的支持。

视觉与物联智能 2917

反汇编工具 win32asm

反汇编 win32 asm汉化了的,好用 下载地址:http://download.csdn.net/source/1565145 转载于:https://www.cnblogs.com/zimmerk/archive/2010/02/06/1949019.html

weixin_34010949的博客 235

华为OD机试 - 末世分配资源包 - 二分查找 + 贪心(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。末世时代,政府为各地方配资源,现有资源分配表 nums[n],要求按如下规则分配给 k 个营地:在最优平均分配情况下,得到最大团队所获得的资源数4,3,6,9,7 216最佳划分之一:[4,3,6] -> 13 [9,7] -> 16最大

学Java,找哪吒 224

【算能】TPU 指令集架构深度解析

TPU指令集以领域专用性与数据流驱动为核心,通过精简指令集、硬件固化逻辑与高并行架构,实现张量计算的极致性能。开发者通常无需直接编写指令,但理解其设计原理对性能调优(如内存布局优化、指令调度)至关重要。算能TPU通过开放指令描述与编译器工具链,为垂直行业提供了更高灵活性的定制空间,而谷歌TPU则依赖编译器的全自动化优化,更适合大规模标准模型部署。未来,随着稀疏计算、光子计算等技术的引入,TPU指令集将进一步向高能效与高泛化性演进。

浩瀚之水的专栏 1183
上一篇: samba配置(从网上收集)
下一篇: 保护模式下段寄存器的作用
deepfuture
博客等级 码龄17年 210粉丝 1287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值