反编译mfc程序

合集下载

FC反编译的简单方法

FC反编译的简单方法

FC反编译的简单方法:适用范围:mapper=0,并且没有trainer如何判断适用范围呢?只要看文件头就知道了。

用16进制编辑器打开ROM,查看前面的16个字节。

要求bit 7的高位(即D4-D7)为0,bit 6的高位(即D4-D7)为0,则mapper=0要求bit 6的D2为0,则没有trainer步骤1.找出3个重要地址nmi, start, irp2.提取程序部分3.用工具反汇编4.分析程序祥细操作1找出3个重要地址nmi, start, irq可用16进制编辑器或”No$nes”,打开ROM,并跳到FFFA,记录下由FFFA开始的连续6个字节。

ROM和别的程序一样,在记录地址时,总是先记录低位再记录高位的。

这6个字节分别是nmi, start, irq的低位和高位了。

Start一般是C000或者8000 (16进制的)2提取程序部分先要知道mapper=0,ROM的数据结构。

操作是:去除ROM的文件头16个字节去除由全是FF的部分到末尾的所有内容。

余下就是程序部分。

另存。

这个文件是ROM的一部分,我取后缀名叫part13用工具反汇编打开“反汇编器.exe”,点右面”6502”用这个“反汇编器.exe”打开这个.part1选择文件时,选”ALL FILES”就可以显示了。

点打开后,选中”BIN文件”,并写入start的地址(见步骤1)确定4分析程序由于程序一般中数据和程序混合的,自己要跟踪代码,分析那一段是数据,那一段是指令。

一般程序是从第一行开始执行,并且不会拿数据来当指令执行。

也就是说从第一行开始,只要看“跳转”就可以知道程序经过的地址,没有经过的就是数据了。

MFC编译常见错误及处理

MFC编译常见错误及处理

创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex各类项目的入口点: ? main:控制台项目? WinMain:Win32 项目? DllMain:Win32 DLL 项目(如果与 CRT 库链接,则无须指定项目,因为它会添加一个默认的 DllMain)下面介绍解决的方法:1. Windows子系统设置错误, 提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:“C/C++”选项卡,将预处理器定义从 WIN32、_DEBUG、_CONSOLE 和 _MBCS 更改为 WIN32、_DEBUG 和 _WINDOWS[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2. Console子系统设置错误, 提示:LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16控制台项目要使用Console子系统, 而不是Windows, 设置:“C/C++”选项卡,将预处理器定义从 WIN32、_DEBUG、_WINDOWS和 _MBCS 更改为 WIN32、_DEBUG 和 _CONSOLE[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3. 程序入口设置错误, 提示:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可4. 线程运行时库设置错误, 提示:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex这是因为MFC要使用多线程时库, 需要更改设置:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本)Multithreaded 多线程静态链接库(release版本)multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本) Debug Multithreaded DLL 多线程动态链接库(debug版本) 单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用。

我用过的几款C#反编译工具

我用过的几款C#反编译工具

我⽤过的⼏款C#反编译⼯具有时候遇到别⼈写的那些有意思的C#程序,⽼想着看看内部的实现逻辑,但是苦于没有源码,那么就得另辟蹊径,想着办法去探索探索,所以可能就会涉及到C#反编译。

为了展⽰各个⽅便功能强⼤的功能,这⾥我先⽤C#写个简单的Demo程序Reflector这是我使⽤的第⼀款C#反编译软件,它的功能缺失强⼤,可以借助⼀些插件来实现修改/保存Reflector配合开源插件Reflexil可以实现反编译代码的修改和保存,现在,我们先去Github把插件下载下来Reflexil插件⽀持Reflector、ILSpy、Telerik's JustDecompile.回到Reflector,依次点击Tools->Add-ins,会添加插件的弹窗我们点击该插件,会在右下⽅出现相应的内容这⾥我们做个简单的修改然后对我们的修改进⾏保存默认保存⽂件名会在原有的⽂件名中加上Patched,最终可以看到修改之后的效果我之前就是⽤Reflector帮⼀个⼈破解了⼀个⼩软件,它的功能是很强⼤,但是要收费,这⼀点我就不是很喜欢了,所以之后就没有⽤过它了。

ILSpy它是基于C#开发的开源反编译⼯具它是免安装的,下载下来解压即可使⽤然后去下载reflexil.for.ILSpy.2.4.AIO.bin.zip并解压,解压后将Reflexil.ILSpy.Plugin.dll复制到ILSpy的解压⽬录现在重新双击ILSpy.exe,打开ILSpy⼯具,可以看到我们的插件被加载到ILSpy了修改⽅式和上⾯的⼀样接下来我们去保存并运⾏是不是觉得还是很实⽤dnSpy这个也是⼀个开源⼯具它是基于其它⼯具整合开发出来的这个⼯具我没怎么⽤过,只是在Github中有看到它,⽽且是开源的⼯具,所以我觉得有必要分享出来,有兴趣的可以去研究⼀下。

dotPeekdotPeek是⼀款免费的反编译⼯具,如果只是查看反编译的代码的话,我⽤这款⼯具是⽤得最多的。

反编译C#的dll文件并修改,再重新生成dll

反编译C#的dll文件并修改,再重新生成dll

反编译C#的dll文件并修改,再重新生成dll
今天公司一个C#的项目svn上代码不是最新的,代码编写人又离职了,只能把已编译且下在使用的dll文件取下来,反编译后再修改代码。

1、把dll文件导入到ildasm工具中,ildasm是由微软提供的.net 程序反编译工具,位于“C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin”
2、在ildasm中File->dump,把dll文件转储为*.il文件存到某个指定文件夹里,得到*.il和*.res两个文件,有时也会有*.resource文件
3、打开得到的*.il文件,找到对应的方法,进行修改(如果修改的代码太多,那则需要先学习一下“C#反编译之IL语法”),具体情况具体分析,修改之后保存。

4、打开DOS命令,进入到*.il的文件夹,然后输入命令:c:\windows\\framework\v2.0.50727\ildasm.exe
/dll/resource=a.res a.il(注意a.res和a.il两文件夹位置不可变),回车,就在对应目录下生成新的dll文件,如果不放心,可以用Refletor反编译工具重新反编译新的dll文件,检查代码。

.Net反编译技术详解及4个反编译工具介绍

.Net反编译技术详解及4个反编译工具介绍

.Net反编译技术详解及4个反编译工具介绍Net反编译技术详解及4个反编译工具介绍什么是反编译?高级语言源程序经过编译变成可执行文件,反编译就是逆过程。

即通过技术手段将可执行文件还原成源代码。

此文讲解如何将.net(c#、F#、)编写的可执行文件还原成c#代码。

了解.net(c#)的编译过程C#源代码经过编译器的编译之后,变成MSIL微软中间语言。

其实也就是一个可执行文件,也可以叫做程序集(.exe文件)。

注意:不是所有的exe文件都叫程序集,这个文件是由微软中间语言组成的才叫程序集。

当程序被执行时,微软中间语言(程序集)将被CLR翻译成平台对应的CPU指令,然后交给CPU执行。

注意:CPU的指令并不是相同的,不同平台的CPU指令可能有比较大的区别。

如:Intel和AMD在开机或者关机的时候Intel可能为111 而AMD可能为000。

不同型号的CPU 指令也可能有区别。

如:四核和双核。

C#代码的编译过程如下图所示:c#反编译过程:反编译过程即将.net 程序集转换成IL中间语言,然后再将IL转为c#代码。

还原率接近90%。

反编译工具介绍:说到.net 反编译工具,很多人第一反应都是Reflector这款神器。

但是我呢认为这是个垃圾软件,为什么呢,因为他收费啊,而且没有什么特别出众的功能,所以本文不加以介绍。

本文主要介绍ILSpy、dnSpy、JetBrains和Telerik JustDecompile以及可直接修改程序集的reflexil插件和脱壳反混淆的de4Dot插件。

文本的示例程序:特意用c#写了一个checkMe程序,用来展示说明以下各个工具的功能。

程序很简单,一个登陆框,输入对的密码即可显示主窗体,显示一个“今日头条很伟大”的字样.checkMe1、ILSpy:ILSpy是一个开源免费的.Net反编译软件,基于MIT 许可证发布。

作者在工作中使用最频繁的就是它。

,ILSpy 是为了完全替代收费的Reflector而生,它是由iCSharpCode 团队出品,这个团队开发了著名的SharpDevelop 。

反编译初识——精选推荐

反编译初识——精选推荐

反编译初识⼀. 反编译(反汇编)简介 1.1. 为什么要反编译(汇编 assembly 反汇编 dissembly) 1.1.1. 反编译原因如下: a. 逆向破解程序,作为⼀个有逼格,素养的我肯定不会这么⼲的。

哈哈 b. 调试程序时,反汇编代码可以帮助我们理解程序(我们学习时使⽤objdump主要⽬的是这个),尤其是在理解链接脚本、链接地址等概念时 c. 把C语⾔源代码编译链接⽣成的可执⾏程序反汇编后得到对应的汇编代码,可以帮助我们理解C语⾔和汇编语⾔之间的对应关系。

⾮常有助于深⼊理解C语⾔。

1.2. 反编译命令 1.2.1. arm-linux-objdump -D led.elf > led_elf.dis 命令 a. objdump是gcc⼯具链中的反汇编⼯具,作⽤是由编译链接好的elf格式的可执⾏程序反过来得到汇编源代码 b. -D表⽰反汇编 1.2.1. 获得反编译⽂件过程 a. 此过程是基于上篇⽂章《》,前期准备参考此⽂章 b. 反编译后⽣成led_elf.disroot@ubuntu:/mnt/hgfs/windows_share/baseC/lesson1.4.13-LED# lsled.S Makefile mkv210_image.c write2sd 说明.txtroot@ubuntu:/mnt/hgfs/windows_share/baseC/lesson1.4.13-LED# makearm-linux-gcc -o led.o led.S -carm-linux-ld -Ttext 0x0 -o led.elf led.oarm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led_elf.disgcc mkv210_image.c -o mkx210./mkx210 led.bin 210.binroot@ubuntu:/mnt/hgfs/windows_share/baseC/lesson1.4.13-LED# ls210.bin led.elf led.o Makefile mkx210 说明.txtled.bin led_elf.dis led.S mkv210_image.c write2sdroot@ubuntu:/mnt/hgfs/windows_share/baseC/lesson1.4.13-LED#View Code 1.3. 反编译⽂件led_elf.dis分析 1.3.1. 我们选取⼀段分析 00000000 <_start>:0: e59f1060 ldr r1, [pc, #96] ; 68 <delay_loop+0x10> a. 00000000 <_start>: 表⽰标号地址、标号名字 b. 0: e59f1060表⽰指令地址、指令机器码 c. ldr r1, [pc, #96]表⽰指令机器码反汇编到的指令,由于有流⽔线的存在,此时PC值是当初指令地址+9; d. 68 <delay_loop+0x10>表⽰注释;0x68 = 96+8led.elf: file format elf32-littlearmDisassembly of section .text:00000000 <_start>:0: e59f1060 ldr r1, [pc, #96] ; 68 <delay_loop+0x10>4: e59f0060 ldr r0, [pc, #96] ; 6c <delay_loop+0x14>8: e5810000 str r0, [r1]0000000c <while>:c: e59f105c ldr r1, [pc, #92] ; 70 <delay_loop+0x18>10: e3e00008 mvn r0, #814: e5810000 str r0, [r1]18: eb00000c bl 50 <delay>1c: e59f104c ldr r1, [pc, #76] ; 70 <delay_loop+0x18> 20: e3e00010 mvn r0, #1624: e5810000 str r0, [r1]28: eb000008 bl 50 <delay>2c: e59f103c ldr r1, [pc, #60] ; 70 <delay_loop+0x18> 30: e3e00020 mvn r0, #3234: e5810000 str r0, [r1]38: eb000004 bl 50 <delay>3c: e59f102c ldr r1, [pc, #44] ; 70 <delay_loop+0x18> 40: e3e00010 mvn r0, #1644: e5810000 str r0, [r1]48: eb000000 bl 50 <delay>4c: eaffffee b c <while>00000050 <delay>:50: e59f201c ldr r2, [pc, #28] ; 74 <delay_loop+0x1c> 54: e3a03000 mov r3, #000000058 <delay_loop>:58: e2422001 sub r2, r2, #15c: e1520003 cmp r2, r360: 1afffffc bne 58 <delay_loop>64: e1a0f00e mov pc, lr68: e0200240 eor r0, r0, r0, asr #46c: 00111000 andseq r1, r1, r070: e0200244 eor r0, r0, r4, asr #474: 00895440 addeq r5, r9, r0, asr #8Disassembly of section .ARM.attributes:00000000 <.ARM.attributes>:0: 00001a41 andeq r1, r0, r1, asr #204: 61656100 cmnvs r5, r0, lsl #28: 01006962 tsteq r0, r2, ror #18c: 00000010 andeq r0, r0, r0, lsl r010: 45543505 ldrbmi r3, [r4, #-1285] ; 0x50514: 08040600 stmdaeq r4, {r9, sl}18: Address 0x00000018is out of bounds.View Code参考《朱⽼师.1.2ARM裸机课件》。

小程序反编译代码

小程序反编译代码

小程序反编译代码
小程序反编译代码,是指对小程序的源代码进行解密和还原操作。

小程序的源代码通常被压缩和加密,以保护开发者的知识产权和应用程序的安全性。

然而,有些开发者想要探究小程序的实现细节或者修改小程序的内容,就需要进行反编译操作。

小程序反编译代码的具体步骤如下:
1. 下载小程序代码包:在微信开发者工具中,通过“工具-下载源代码”选项,可以把小程序的源代码下载到本地。

2. 解压代码包:下载的代码包是一个压缩文件,需要解压后才
能进行操作。

可以使用WinRAR或7-Zip等压缩软件进行解压。

3. 导出小程序代码:在微信开发者工具中,通过“上传代码”
选项,可以把本地的小程序代码导出到微信公众平台。

4. 使用反编译工具:通过反编译工具,可以还原小程序的源代码。

目前比较常用的反编译工具有:
- 微信小程序开发者插件:这是一款Chrome插件,可以在Chrome 浏览器中运行,可以直接反编译小程序的源代码。

- JD-GUI:这是一款Java反编译工具,可以反编译Java字节码文件。

如果小程序是用Java语言开发的,就可以使用这款工具进行
反编译。

- jadx:这是一款基于Java的反编译工具,可以反编译APK文
件和DEX文件。

如果小程序是用Android平台开发的,就可以使用这款工具进行反编译。

需要注意的是,小程序的反编译操作可能涉及到知识产权和法律问题,建议开发者在进行反编译操作前,先了解相关法律法规和道德规范,遵守相关规定。

MFC 程序逆向分析 消息篇

MFC 程序逆向分析 消息篇

b. 在 CALL DWORD PTR DS:[EAX+60]这一条语句上设置条件断点[[esp]+4]==202,即可设置鼠标左键释放断点。
说明:call [eax+60]是调用 PreTranslateMessage 函数,入口参数为:MSG* pMsg,所以:
[esp]就是 pMsg,而[[esp]]就是 pMsg->hWnd , [[esp]+4]就是 pMsg->Message
CWnd::OnWndMsg -> CWnd::OnCommand -> CDialog::OnCmdMsg -> CCmdTarget::OnCmdMsg -> _AfxDispatchCmdMsg ->
CD1Dlg::OnButton1()
VC 下,可以随手写一个标准的对话框程序,上面放一个按钮,点击按钮后,弹出一个消息框。我们现在就从 PumpMessage() 开始,踏上消息之旅,来分析这中间的消息流程。
PUSH EDI
73D311B7 8BCE
MOV ECX,ESI
73D311B9 FF50 60
CALL DWORD PTR DS:[EAX+60]
; PreTranslateMessage (消息预处理)
73D311BC 85C0
TEST EAX,EAX
73D311BE 75 0E
JNZ SHORT MFC42.73D311CE
// 通过 WalkPreTranslateTree 进行消息分发
if (CWnd::WalkPreTranslateTree(pMainWnd->GetSafeHwnd(), pMsg)) return TRUE; // 消息分发处理关键
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

反编译mfc程序
反编译MFC程序是指将已经编译好的MFC程序重新转换为源代码的过程。

这个过程通常是为了分析程序的实现细节、修复bug或者进行修改。

要反编译MFC程序,可以使用一些专门的工具,例如IDA Pro、OllyDbg等。

以下是一个基本的步骤:
1. 下载并安装一个反编译工具,例如IDA Pro。

确保选择与目标程序相匹配的版本。

2. 打开目标程序的可执行文件(.exe)或者动态链接库文件(.dll)。

3. 分析程序的结构并识别关键代码。

这可能包括查看函数、类和全局变量。

4. 使用反编译工具将程序的机器码转换为对应的高级语言代码。

这可能是C++、C#等。

5. 根据需要,对反编译的代码进行修改或者调试。

需要注意的是,反编译是一项复杂的技术,并且可能违反软件许可协议或法律规定。

在进行反编译之前,建议先了解相关法律法规,并确保有合法的权限进行这样的操作。

相关文档
最新文档