代码逆向乱谈之导引

移动底盘运动学模型:从理论到实践的三种典型实现 本文深入解析了移动底盘运动学模型从理论到实践的三种典型实现:四轮差速、麦克纳姆轮和两轮差速模型。文章通过对比其原理、公式推导、代码示例及应用场景,为机器人、AGV及自动驾驶领域的开发者提供了清晰的选型指南与实战经验,帮助读者根据具体需求选择并实现合适的底盘控制方案。 阅读详情
文章提交: xikug (xikug_at_163.com)

代码逆向乱谈之导引


序

早就想写点什么,自己都不知道一天在瞎忙什么,一直到最近才开始动手。。。我想通过这个乱谈系列跟大家分享一些心得。我打算在这个系列文章中讲点方法与思路,当然,很多方法并不是我的原创,只是我用这些方法和思路解决了我的实际问题。由于本人水平有限,很多说法只是我个人的理解,然后用我自己的语言表达出来,可能并不专业,所以在这里不负责任的乱谈一下,欢迎大家拍砖。

什么是代码逆向

代码逆向即是在没有源代码的情况下,对目标程序的行为、数据流、及编译器生成的代码进行分析,通过分析我们可以了解、发现程序的功能、流程、规则、及技术实现细节等,通过分析我们能对其进行优化、功能增强、漏洞填补、甚至还原成源代码等。这个分析过程我们可以称作逆向分析或逆向工程,简称逆向。

对我们个人而言或许我们能够从逆向分析的过程得到的最大好处就是学习到优秀程序的设计思想、及技术实现细节。

当今,逆向分析技术在很多地方都得到了应用,典型应用包括恶意软件分析、漏洞挖掘、BUG定位、技术探秘等。

有人可能会说逆向太无耻了,自己不会写就偷别人的代码。。。我就不相信说这话的人什么都会,我就不信他没有分析过别人的东西,学习过别人的东西,我只能说他是无知的。。。殊不知逆向是一个探索未知的方法,是一种学习态度,是代表不屈服于困难的精神。如果没有逆向当前的很多科学进步不了这么快,也可能不能取得进步,科学研究就是探索未知,把我们未知的东西进行分析研究变成已知,不光是软件领域有逆向工程的应用,其他领域如:基因重组、化工、制药、电子、建筑、航空、军事等领域也存在着他们各自的逆向工程应用,逆向工程帮助科研人员把未知的东西进行分解、研究、组合、改进等,甚至创造新的东西出来等,科学就是这样一点点进步的。

通过逆向得到的好处是显而易见的,然而任何技术都是把双刃剑,逆向分析技术也不例外。可能被人用于学习、解决技术问题或做有益于软件安全的事,也可能被人用于搞破坏。

逆向方法

白盒分析
白盒分析就是从代码级别上(可能是反汇编代码、反编译的伪代码或源代码),通过动态调试或静态反汇编分析和理解程序的功能、逻辑,找到程序的安全问题等。

黑盒分析
黑盒分析是指从程序的外部,通过观察程序运行时候的行为,规则等来猜测和断定程序可能的实现方法,是否有存在脆弱点等。

灰盒分析
灰盒分析通常需要借助一些专有工具(可能需要自己编写),如api监视工具,陷阱工具,内存比较工具,文件监视工具等对目标程序进行监控,看它发生了什么操作,调用了哪些api,产生了哪些结果,在系统哪些地方安插了HOOK或过滤等,以此来猜测和断定程序可能的实现细节。

目前越来越多的程序加了VM或进行了代码扭曲,用白盒分析此类程序可能会花很大力气也找不到突破口,而黑盒和灰盒分析往往对这类程序可能有意想不到的效果。

逆向手段

动态调试
通过调试器对目标程序进行追踪分析,能够清楚的了解到程序运行起来后内部的状态,运算结果等信息。

静态反汇编/反编译分析
使用反汇编器或反编译器把目标程序变为可读的汇编代码或伪代码,然后分析程序的结构,流程,逻辑等。

如何学习

逆向并不是想像中那么难,但也不是想像中的那么简单,真正困难的是如何有效的运行这些方法和手段来更快、更好的达到我们的目的,这需要累积大量的程序设计经验和逆向经验。

通常我们进行逆向的时候希望达到的目的大致可分为以下几种:

技术探秘/代码还原

软件漏洞挖掘

软件Bug定位

软件行为/规则分析

解除软件的使用限制

进行辅助程序的开发


我们要达到的目的不同,逆向时采用的方法和手段的“细腻”程度也不会相同,譬如我们对一个win32平台下的内核驱动进行“技术探秘/代码还原”的时候可能会把白盒、黑盒和灰盒所有的方法和手段都用上,每段汇编代码我们都必须看懂,代码实现了什么功能,跟另一段代码有什么关系,理解整个代码的架构和思想等;而我们在进行“软件行为/规则分析”的时候可能只需用上黑盒或灰盒分析法就够了,知道按下这个按钮后读写了哪些文件,哪些注册表项,调用了哪些api等等。分析过程中有时候我们只需静态反汇编看一下就可以了,有时候我们可能还需要动态调试一下,总之没有固定的套路,一切视情况而定。

扎实的编程基础是学好逆向的关键,基础打好了学什么都快。程序的基础就是算法和数据结构,语言只是一个实现的工具,绝大多数语言都是相通的,我们只要掌握一门,以后如果需要学习其他语言的话上手就会很快了,基础知识我们重点需要掌握以下内容:

1.至少一门高级程序设计语言,推荐C语言或Pascal
2.x86汇编语言
3.常用算法和数据结构

软件一般都是在特定平台下运行的,如Windows平台,Linux平台,WinCE平台,Java平台,Symbian平台,Plam平台等等。。。针对特定平台下的软件逆向,需要掌握特定平台下程序设计的相关知识,包括其SDK,进程管理,内存管理,文件系统等。这些东西不必全部精通,但要有个大致的了解,常用Api要知道,有特定平台下的程序设计经验最佳,遇到问题知道在哪里能找到自己想要的资料就够了。逆向的过程本身就是一个学习的过程,因此我们可以在逆向的过程中补充自己相关的知识,这样学习的效果是最佳的。(由于本人所接触的面比较窄,接触得最多的就是x86 Windows平台下的原生程序逆向,因此本系列文章中的内容除非特别说明都是指x86的Windows平台下原生程序和代码)

学习逆向的最好方式就是动手实践,在实践中有针对性的学习。通常来说我们逆向时所面临的东西对我们来说是未知的或者是可能知道但不确定的,如果是已知的就没必要再去逆向了。针对性的学习就是在自己逆向的时候缺什么知识就补什么知识,日积月累过后我们的收获是相当可观的,不光是经验值的增长,还有知识面的增长和知识深度的增长。

编程的经验对于我们实践逆向时也很重要,例如进行“漏洞挖掘”的时候我们可能会以程序设计者的角色进行思考,程序在哪些地方需要进行防范,哪些地方可能会出现漏洞等等,如果我们有足够的经验的话,可以很快定位到相关的代码部分对其进行分析,看是否存在可能的漏洞。又如在进行“技术探秘/代码还原”的时候,由于现在的程序规模越来越大,我们不可能每条指令,每段代码都去看,都去逆向,假如一个1M的程序需要这样做的话,光时间成本上来说成本都是相当高的,因此我们需要快速定位关键代码段,而丰富的编程经验有助于我们做到这一点。拓宽自己的编程知识面、积累编程经验跟积累逆向经验同样重要。丰富的编程经验能让我们事半功倍。

另外在进行代码还原时我们最好能用原始程序的实现语言进行还原,这是为了避免麻烦,因为现代的编程语言通常都有自己的Framework,提供各种各样的类库,他们功能各异,互不兼容,如一个VCL的程序我们硬要用MFC对其还原,VCL的某一非常复杂的机制或功能在MFC中可能没有,而自己如果在MFC中实现的话工作量是相当庞大的,这时的结果可能就会是事倍功半了。因此我建议在代码还原时最好使用原语言进行,原来是C的就用C,原来是Delphi的就用Delphi,原来是Python的就用Python。。。

逆向工程时常具有“四两拔千斤”的功效,我也不太会表述,等你有足够的实践之后大概才能体会到,这个就只能意会不能言传了:P。

学习资源
上面说了那么多,是时候介绍一些学习资源的时候了,这些资源都是比较基本的,可说是学习阶段必备的,希望在大家学习和实践的过程中能帮到大家。

书
《Windows程序设计(第5版)》 – Windows平台下程序设计的经验教程。URL - http://www.china-pub.com/2382

《Windows核心编程》 – 又是一本经验的书,可以帮助你把Windows下的编程技术提升一个层次。 URL - http://www.china-pub.com/131

《深入解析Windows操作系统(第4版)》 – 这本书是关于Windows内部机理核心的权威之作。这本书对提高你的逆向水平也是大大有帮助的,当然,前提是在你看懂之后。 URL - http://www.china-pub.com/32775

《加密与解密》 – 不错的入门书籍,快出第三版了, http://www.china-pub.com/12210

网站
www.rootkit.com – 很多关于系统安全,系统内核方面的资料和代码
www.codeproject.com – 很多程序设计的代码和文章
msdn.microsoft.com – 包含最新的微软平台下的开发资料


论坛
bbs.pediy.com - 看雪论坛,国内最大的加解密论坛,已经向软件安全转型,上面汇集了国内大批高手。
www.unpack.cn - 一蓑烟雨,国内最专业的脱壳论坛,关注面也很广,除了脱壳外还有汉化、软件安全、木马病毒、编程、游戏、文学、音乐、艺术等,上面的高手也不少。
bbs.driverdevelop.com - 驱网论坛,驱动开发的论坛,高手不少,但是发言的比较少,可以去逛逛。
forum.sysinternals.com – Sysinternals,很多系统方面的资料,不少高手在上面发言。
www.debugman.com - 第8个男人,在下创建的论坛,旨在为志趣相投的朋友提供一个交流平台,目前关注方向为程序设计、逆向、代码安全和系统底层等。

工具
这里列出的工具只是很少一部分,对工具的选用,我的观点是哪个随手就用哪个。
OllyDbg – 调试器,ring3下的调试器,上手快,功能强大,有很多插件。
SoftIce – 调试器,ring0级调试器,当然ring3程序也是可以调的,功能强大,但已经不更新了,不支持vista等较新的操作系统。
WinDbg – 调试器,MS自家的调试器,就不多介绍了,两个字 - 推荐。
IDA – 反汇编器,最强大的静态反汇编分析工具。
LordPE – PE工具,可编辑PE文件等。
PEiD – PE工具,可识别PE文件的格式信息,如用什么编译器编译的,是不是被什么壳处理过了等。
FileMon – 文件监视工具,可监视系统或程序对哪些文件做了什么操作。
RegMon – 注册表监视工具,可监视系统或程序对哪些注册表项做了什么操作。
SSM – HIPS,这个工具有时候可以给逆向带来很多方便,如抓取某个文件,禁止访问某个注册表项,盒灰分析等。
远程声控系统(MATLAB代码见优快云资源) 远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基 阅读详情

相关推荐

永磁同步电机定子槽型设计实战:从梨形槽到矩形槽的NVH优化之路

本文深入探讨了永磁同步电机定子槽型设计在NVH优化中的关键作用,对比了梨形槽与矩形槽的性能差异。通过Ansys Maxwell仿真和实际案例,揭示了矩形槽在提升槽满率、降低电磁噪声方面的优势,并总结了五大设计黄金法则,为电机设计工程师提供了实用指导。

weixin_28740299的博客 494

《逆向工程核心原理》学习笔记(一):代码逆向技术基础

开始学习逆向,从《逆向工程核心原理》这本经典开始,本篇笔记是第一部分:代码逆向技术基础

闵行小鱼塘 4903

Pcileech(DMA)开源项目简述

希望大DMA家能正确认识FPGA,正确使用DMA技术,对于市场上各类伪装成花里胡哨设备的FPGA板卡它的本质是不会变的,不要上当受骗。

2301_79773847的博客 5966

代码逆向(一)——寻找main函数入口

<br />逆向的第一步是什么?这要问你学习C语言的第一步是什么,很自然的,逆向的第一步当然也是大名鼎鼎“HelloWorld!”了。但是也不要因此就误认为这一节会很简单,如果你是第一次接触逆向的话,那么这一节还是有些难度的。<br /><br />      好的,让我们先写一个世界上最出名的程序:<br /><br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />    printf("Hello World!/r/n");<br />    ret

蛛丝 1万+

后仿真中《SDF反标必懂连载篇》之 Negative Delay (理论篇)

今天,学习一下SDF文件中的负数延时问题。比如下面的图片中的SETUPHOLD 中的hold time 为负数。

那么菜的博客 2579

五种音频器件综合对比——《器件手册--音频器件》

音频器件当在蜂鸣片的两片电极之间接通交流音频信号时,蜂鸣片会根据信号的大小和频率发生振动,从而产生相应的声音。结构简单、造价低廉。广泛应用于玩具、电子表、电子仪器、电子钟表、定时器等电子电器方面。蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于各种电子产品中作发声器件有源蜂鸣器:内部带震荡源,通电即发声,程序控制方便。无源蜂鸣器:内部不带震荡源,需用方波驱动,声音频率可控,价格相对便宜。计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品。

XU157303764的博客 1538

【2025版】最新恶意代码逆向分析,从零基础到精通,收藏这篇就够了!

当然,在自我注入的情况下,更容易找到恶意的二进制文件/payload。代码注入是 Window 系统上支持的操作,当然,它是一种非常有用的规避方法,因为恶意软件能够将恶意代码注入(写入)进程本身(自我注入)或远程(远程注入)的内存区域(有些人使用术语“段”)中,并且此有效负载将在目标上下文上执行,无论它是否成为它的一部分,并且不会留下很多证据。**关键是:当线程被创建时,会触发进程回调,并检查磁盘上文件的内容(好的),所以安全防御认为一切都很好,因为磁盘上的镜像是无害的,但真正的恶意在内存中。

Javachichi的博客 3216

【WRFDA教程】客观分析(OBSGRID)详解

客观分析(OBSGRID)详解

WW、forever的博客 1134

逆向汇编指令与代码功能理解(2)

今天继续汇编指令和代码功能理解的学习。

Sean_summer的博客 1557

机器学习的低代码与无代码平台:便捷入门之路

机器学习领域正涌现出大量低代码和无代码平台,使非技术人员也能轻松应用AI技术。低代码平台(如PyCaret、H2O AutoML)需少量编程但灵活性强,而无代码工具(如Google Cloud AutoML、Teachable Machine)则完全无需编程基础。这些平台覆盖图像识别、文本处理、业务预测等多种场景,适合快速部署简单项目。但专业人士仍需注意,这些工具无法替代复杂场景下的定制化开发。随着技术进步,低门槛AI工具正在改变各行业的创新方式。

2501_90323865的博客 154

爬虫进阶必备:深入理解requests.Session(),提升爬虫效率与稳定性

前两天,有个朋友跟我吐槽,说自己写了个爬虫爬取某个电商网站的商品信息,刚开始跑得好好的,爬了大概几百页之后,突然就开始报错了。HTTP状态码一会儿429,一会儿403,最离谱的是有些页面明明登录了却显示未登录状态。他排查了半天也没找到原因,最后把代码发给我看。 我扫了一眼代码,发现一个典型问题:他每次请求都新建一个requests.Session(),甚至有些请求直接用了requests.get()。这就好比每次进超市都要重新注册会员,每次都重新跟服务器“握手”,不翻车才怪。 其实,这就是我们今天要聊的

2201_76125261的博客 1228

代码逆向乱谈之导引(安全焦点)

创建时间:2008-05-04文章属性:原创文章提交:xikug (xikug_at_163.com)代码逆向乱谈之导引序早就想写点什么,自己都不知道一天在瞎忙什么,一直到最近才开始动手。。。我想通过这个乱谈系列跟大家分享一些心得。我打算在这个系列文章中讲点方法与思路,当然,很多方法并不是我的原创,只是我用这些方法和思路解决了我的实际问题。由于本人水平有限,很多说法只是我个人的理解,然后用我自己的

巅峰测试 929

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

weixin_44119674的博客 440

CTF笔记(一)之小白入门导引

CTF 入门导引 目的 介绍CTF比赛 CTF比赛需要的知识储备 CTF比赛的神器 CTF比赛 “夺旗大赛” 比赛形式 1.挖掘漏洞,利用漏洞进入对方电脑,拿到关键文件 /home/www/flag /home/ctf/flag dsjklsajdlksajdksadkljsadlkjslkdjsalkjdlksajdlksajdlksah 比赛赛制 ctf线上赛 分为web二进制和杂项 c...

qq_32719221的博客 1029

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

从虚拟机架构到编译器实现导引【一本书的长度】

i春秋作家:immenma 原文来自:从虚拟机架构到编译器实现导引【一本书的长度】 在说些什么实现的东西之前,笔者仍然想话唠唠叨下虚拟机这个话题,一是给一些在这方面不甚熟悉的读者简单介绍下虚拟机的作用和包治百病的功效,二来是题头好好吹一吹牛,有助于提升笔者在读者心中的逼格,这样在文中犯错的时候,不至于一下就让自己高大上的形象瞬间崩塌。 是的,当前虚拟化技术已经在计算机及互联网中烈火...

dfdhxb995397的博客 260

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

openage 逆向解析《帝国时代2》寻路机制:从 mip-map 高层寻路到流场寻路的工程实践

openage 作为《帝国时代2》引擎的开源重制实现,在其仓库的 [doc/reverse_engineering/game_mechanics/pathfinding.md](https://link.gitcode.com/i/b539ae2afc4b7626b22c042a5c992574) 中记录了原版游戏寻路系统的逆向研究结论:原版《帝国时代2》并非使用单一寻路算法,而是由**三套互补的

gitblog_00005的博客 186

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CTF导引(一)

ctf预备知识: 视频:https://www.bilibili.com/video/av62214776?from=search&seid=1436604431801225989 CTF比赛:“夺旗大赛”   比赛形式:     挖掘漏洞,利用漏洞进入对方电脑,拿到关键文件:     /home/www/flag     /home/www/flag    ...

a525024162806525的博客 297

2021-07-04 CTF夺旗赛 CTF 黑客大赛导引

CTF 黑客大赛导引 目的 介绍CTF比赛 CTF比赛需要的知识储备 CTF比赛的神器 CTF比赛的作用 CTF比赛的经验 一:CTF比赛 “夺旗大赛” 比赛形式 1.挖掘漏洞,利用漏洞进入对方电脑,拿到关键文件 /home/www/flag /home/ctf/flag 比赛历史与背景 种类 cft xcft--->强网杯 tcft defcon ctf 2.形式 1.ctf线上赛 web 二进制 杂项 2.ctf线下赛 web漏洞挖掘与利用---10% pwn漏洞与利用----90

愚公智库 5万+

Perplexity音乐知识检索失效真相(深度逆向解析其音频语义图谱架构)

揭秘Perplexity音乐知识搜索失效根源,提供音频语义图谱逆向解析方法。适用于音乐学者、AI工程师及版权合规人员,通过结构化拆解其嵌入层与跨模态对齐机制,定位检索断层。准确揭示架构瓶颈与优化路径,值得收藏。

LogicGap的博客 271

小白也能看懂的约瑟夫环问题

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 结果+1即为原问题的解。 如果还看不懂问题,杨帆兄简单易懂的约瑟夫环 PS: 首先附上代码 这个代码是一共n个人,每次淘...

南 墙 1万+

AGV全覆盖移动避障路径规划Matlab代码:‘深度优先搜索算法‘与‘随机碰撞的路径规划

AGV全覆盖移动避障路径规划matlab代码扫地机器人路径规划第一类算法 全覆盖智能算法%% 基于深度优先搜索算法的路径规划—扫地机器人移动仿真% 返回深度优先搜索实现全覆盖的运行次数% 将栅格模型的每一个栅格看成一个点% 实际中栅格模型是连续的,在计算机处理时看作离散的% 将栅格模型抽象为标识矩阵,矩阵对应位置的标记表示栅格对应位置的状态第二对比算法%% 随机碰撞的路径规划—扫地机器人移动仿真% 返回深度优先搜索实现全覆盖的运行次数% 将栅格模型的每一个栅格看成一个点。

yTfDRlpl的博客 568
上一篇: 对抗启发式代码仿真检测技术分析
下一篇: PcShare 2005 源代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值