标签: reverse-engineering

开始硬件开发

我希望开始简单的硬件开发,并希望进步足以从逆向工程中学习.

我想从一个微控制器开始,并考虑一些,如Mbed和Arduino.我该怎么办?

我想也许是mbed,因为它有USB和以太网功能,还有其他几个,但我真的不知道Arduino有什么.公共汽车盗版(因为它更便宜)也会起作用吗?

我真的不想基本编程; 我目前的视差控制器很痛苦!

microcontroller reverse-engineering hardware-design

7
推荐指数
0
解决办法
655
查看次数

逆向工程师自动生成C?

对自动生成的C代码进行逆向工程有多容易?我正在研究一个Python项目,作为我工作的一部分,我正在使用Cython编译代码以加速.

这确实有助于速度,但是,我担心在我工作的地方,有些人会试图"窥视"代码并弄清楚它的作用.

Cython代码基本上是一个自动生成的C.逆向工程很难吗?

是否有任何建议可以使代码更安全,反向工程更难做?(我认为只要付出足够的努力,一切都可以逆向设计).

c python reverse-engineering cython

7
推荐指数
1
解决办法
1703
查看次数

PE导出目录表的OrdinalBase字段被忽略了吗?

根据我和其他人的经验(http://webster.cs.ucr.edu/Page_TechDocs/pe.txt),PE/COFF规范文档错误地声称序数表中包含的出口地址表索引是相对的到Ordinal Base,甚至给出了一个不正确的例子(第5.3节).实际上,Ordinal Table中的索引是基于0的索引到正常情况下的Ordinal Base = 1的地址表中.我在VS Studio生成的PE库和系统库(如Kernel32.dll)中看到了这一点.

我的问题是,你有没有观察过一个带有Ordinal Base的二进制数不等于1?我想知道这是一个off-by-one错误,还是Ordinal Base从未应用于Ordinal Table条目.

dll reverse-engineering portable-executable dllexport

7
推荐指数
1
解决办法
1706
查看次数

逆向工程从源代码中记录了Java

我是一名系统工程师,最近大学毕业,我刚刚获得了一个非常令人生畏的项目.

我们有一个遗留系统,我们合法拥有整个代码及其所有权利.问题是代码记录不完整,文档不完整,有时错误,原始开发人员不可用.

它使用自定义Perl构建脚本需要CPAN的一千个模块才能工作,我不知道Perl.除了Doxygen之外,反向工程到UML失败了,仅限于继承图和调用图.

我已经获得了一个巨大的黑板,我正在慢慢地浏览代码,建模包,然后在其中嵌套包.

我的问题是我是否正在从正确的方向接近这种逆向工程.我正在从底部工作,试图弄清楚在开发UML和编写设计文档时会发生什么.我做了一个包图,但很难弄清楚在那个高水平上发生了什么.

我提出的一篇学术论文表明,我还制作了一份新的需求文档,这将使我的速度更慢,我不知道这是不是一个好主意,因为其他开发人员总是忙于保持遗留系统.

有没有可以帮助我的书籍,我是从正确的角度接近这个吗?我是否应该聘请了解Perl和JMX的合同工来帮助我?

java uml reverse-engineering re-engineering

7
推荐指数
2
解决办法
819
查看次数

带有完整调试器的Game Boy模拟器?

作为我一直在做的工作的一部分来回答关于神奇宝贝红色故障的技术工作的问题,我一直在寻找一种方法来使用标准调试器来调试Game Boy ROM.虽然我发现的许多仿真器都有一些调试支持,但到目前为止我发现的任何东西都没有用.

作为背景,截至目前我已尝试使用Visual Boy Advance内置功能进行调试,但它们对我正在尝试的内容并不是特别有用.VBA缺乏设置断点的能力,并且因为它在帧的级别而不是指令上向前迈进,所以当我真正需要它时,我无法看到代码是如何执行的.虽然VBA说它支持GDB调试,但我完全无法让它工作.我尝试按照说明交叉编译GDB for ARM,但无法让GDB连接到仿真器(它会认识到有一个程序要连接,但报告说该协议已被违反).我在使用Cygwin的Windows和Ubuntu Linux上都取得了类似的成功.我和朋友试图使用Insight/GDB,但遇到了完全相同的问题.

我也尝试使用NO $ GBA调试器,但它拒绝为PokémonRed加载我的ROM(然后侮辱我说我不能尝试做的任何事情都会修复它,因为文件只是完全错误).

此外,我尝试下载此版本的Visual Boy Advance声称其中有一个调试器,但由于某种原因我无法启用它来启用调试器.按照说明按F11无效.

我相信我已经完成了我的尽职调查,试图让调试器工作,我很惊讶他们中没有一个工作过.有没有人知道使用标准调试技术调试Game Boy游戏的简单,直接的方法?我最感兴趣的是能够在内存中写入断点(看看什么例程破坏了内存的某些部分).如果有第一手经验的人可以提供有关如何执行此操作的详细信息,我将非常感激,因为有关该主题的在线资源似乎非常有限.

debugging reverse-engineering gameboy

7
推荐指数
3
解决办法
1万
查看次数

"相对虚拟地址",相对于什么?

我刚刚阅读了关于它们在磁盘上的文件中的偏移,RVA和VA一旦被加载到内存中.我还读到,如果一个PE文件完全像在磁盘中一样加载到内存中,那么RVA将与文件偏移相同(并且发生这种情况将是非常不寻常的).

我怀疑的是 - 在正常情况下,这些RVA相对于什么?特定PE数据结构的开始?

编辑:通过PE数据结构我的意思是 - PE头,DOS头,DOS存根,PE文件头,图像可选头,节表和数据目录.

windows file-format reverse-engineering portable-executable

7
推荐指数
1
解决办法
3392
查看次数

逆向工程?

我有*.ipa文件,它是iphone应用程序.

  • 是否可以在ipa中使用逆向工程并提取代码..?

iphone reverse-engineering ios ipa

7
推荐指数
1
解决办法
4248
查看次数

GCC生成组装

为什么printf函数会导致序言的变化?

C code_1:

#include <cstdio>

int main(){
  int a = 11;
  printf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)

GCC -m32生成一个:

.LC0:
        .string "%d"
main:
        lea     ecx, [esp+4]           // What's purpose of this three
        and     esp, -16               // lines?
        push    DWORD PTR [ecx-4]      // 
        push    ebp
        mov     ebp, esp
        push    ecx
        sub     esp, 20                // why sub 20?
        mov     DWORD PTR [ebp-12], 11
        sub     esp, 8
        push    DWORD PTR [ebp-12]
        push    OFFSET FLAT:.LC0
        call    printf
        add     esp, 16
        mov     eax, 0
        mov     ecx, DWORD PTR …
Run Code Online (Sandbox Code Playgroud)

c c++ assembly gcc reverse-engineering

7
推荐指数
1
解决办法
601
查看次数

Windows 10任务管理器如何检测虚拟机?

Windows 10任务管理器(taskmgr.exe)知道它是在物理机还是虚拟机上运行.

如果查看" 性能"选项卡,您会注意到处理器标签的数量是读取逻辑处理器:虚拟处理器:.

此外,如果在虚拟机内运行,还有标签虚拟机:是.

请参阅以下两个屏幕截图:

taskmgr本地处理器

taskmgr虚拟处理器

我的问题是,如果有一个记录的API调用taskmgr用于进行这种检测吗?

我非常简短地看一下反汇编,似乎检测代码与GetLogicalProcessorInformationEx和/或IsProcessorFeaturePresent和/或NtQuerySystemInformation有某种关系.

但是,我没有看到(至少没有花费更多时间来分析汇编代码).

并且:这个问题是IMO与其他现有问题无关,如何检测我的程序是否在虚拟机内运行?因为我没有看到任何代码试图将smbios表字符串或cpu供应商字符串与管理程序典型的现有已知字符串("qemu","virtualbox","vmware")进行比较.我不排除较低级别的API实现可以做到这一点,但我没有在taskmgr.exe中看到这种代码.

更新:我还可以排除taskmgr.exe正在使用CPUID指令(EAX = 1并检查ECX中的管理程序位31)来检测矩阵.

更新:仔细看看反汇编表明确实检查了第31位,显然没有那么做.

我将在下面自己回答这个问题.

windows virtualization reverse-engineering virtual-machine windows-10

7
推荐指数
1
解决办法
1889
查看次数

如何利用npm审核?

TLDR:是否可以将漏洞检测功能npm audit作为一种静态服务而不是当前的CLI实施来利用?

npm在针对节点安全平台(NSP)漏洞数据库的每个安装请求上提供自动漏洞扫描,并在您尝试使用不安全代码的情况下警告您。此外,npm audit递归地分析您的依赖关系树,以明确识别不安全的内容,建议替换或使用npm审核修复程序自动对其进行修复。

此功能很棒,我希望能够在Web应用程序中利用此漏洞扫描功能。那我为什么要这样做呢?

似乎大多数公司都托管一个内部JFrog存储库,该存储库需要不断更新和维护,以反映npmjs。但是,一种更有效的方法(在我看来)是使用mitmproxy创建一个简单的Web应用程序嵌入其中。然后,此Web应用程序将更像是代理,其功能将允许其基于自定义业务逻辑和/或npm审核漏洞报告的发现来过滤npm请求。这样做的好处是允许用户自定义其风险评估容忍度,并利用npmjs分发所请求的库。结果,这将使公司不再需要托管任何内部JFrog实例,并且有可能通过使npmjs处理所述库的托管来降低成本。

下面列出的是npm audit报告的一部分:

$ npm audit
Run Code Online (Sandbox Code Playgroud)

审计报告样本:

                        === npm audit security report ===  

#                            ...  Removed unnecessary details                                                                                 

# Run  npm install jquery@3.4.1  to resolve 1 vulnerability
????????????????????????????????????????????????????????????????????????????????
? Moderate      ? Prototype Pollution                                          ?
????????????????????????????????????????????????????????????????????????????????
? Package       ? jquery                                                       ?
????????????????????????????????????????????????????????????????????????????????
? Dependency of ? jquery                                                       ?
????????????????????????????????????????????????????????????????????????????????
? Path          ? jquery                                                       ?
????????????????????????????????????????????????????????????????????????????????
? More info     ? https://nodesecurity.io/advisories/796                       ?
????????????????????????????????????????????????????????????????????????????????


found …
Run Code Online (Sandbox Code Playgroud)

reverse-engineering node.js npm npmjs npm-audit

7
推荐指数
1
解决办法
3259
查看次数