标签: reverse-engineering

基于现有数据库创建新的 rrd 数据库

我有一些旧的 rrdtool 数据库,其确切的创建方法早已丢失。我需要创建一个与当前数据库具有相同特征的新数据库。我已经转储了几个旧数据库并仔细研究了内容,但我不确定如何解释元数据。我认为它出现在以下节中

<cf> AVERAGE </cf>
<pdp_per_row> 360 </pdp_per_row> <!-- 1800 seconds -->
<xff> 5.0000000000e-01 </xff>
Run Code Online (Sandbox Code Playgroud)

有四个这样的节,它们与我记得设置循环级联的方式相对应。有没有人已经这样做了,或者可以给我一些关于如何从现有数据库克隆一个新的空 rrd 数据库的指针?或者告诉我我在文档中遗漏了什么。

clone reverse-engineering rrdtool rrd

4
推荐指数
1
解决办法
4204
查看次数

Hibernate使用Equals生成POJO

我们在一个新项目中使用hibernate,之后我们使用它hibernate.reveng.xml来创建我们的*.hbm.xml文件和POJO.我们希望在每个POJO中都有等于方法.我发现你可以<meta attribute="use-in-equals">true</meta>在你的hbm文件中使用来标记在equals中使用哪些属性.但这意味着编辑大量文件,然后在我们修改数据库中的表或列时,将来再次重新编辑文件.

所以我想知道是否有办法在hibernate.reveng.xml文件中的每个pojo(表)的equals方法中放置哪些属性?

java orm hibernate reverse-engineering pojo

4
推荐指数
1
解决办法
2676
查看次数

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

如何在多线程程序中使用Ollydbg?

  1. 我在这里看到Olly支持多线程调试,但我找不到任何视频或一个很好的教程来了解如何调试多线程程序.

  2. 我想知道如何使用Ollydbg和查看所有当前线程的堆栈和寄存器,并区分现在正在运行的线程.

  3. 我可以在Linux/Windows中使用其他任何好的调试工具吗?

linux windows debugging reverse-engineering ollydbg

4
推荐指数
1
解决办法
7206
查看次数

如何从目标文件(Mach-o)获取SEL(@selector())?SEL如何存储在Mach-o中?

从objc来源我们可以看到SEL定义为typedef struct objc_selector *SEL;

我用idaq反汇编我的dylib ,并且我确实调用了_MSHookMessageEx函数,它是从libsubstrate.dylib链接的

_MSHookMessageEx 有以下签名

void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);
Run Code Online (Sandbox Code Playgroud)

所以我们可以假设在源代码中有类似@selector(someMethod:)第二个参数的东西

在目标文件的数据部分,我可以看到源代码中使用的所有CFStrings

在此输入图像描述

但是这里没有任何选择器字符串,所以我们可以看到它@selector()没有转换成静态CFString

我很感兴趣找到传递给_MSHookMessageEx函数的选择器和类的String表示.

如何从目标文件(Mach-o)获取SEL(@selector())?SEL如何存储在Mach-o中?

谢谢!

更新:

我确实在调用方法之前在ida方法表示中有一些字符串

在此输入图像描述

我猜有些选择器传入函数.我对吗?

iphone reverse-engineering objective-c ida cydia-substrate

4
推荐指数
1
解决办法
879
查看次数

在PE文件中跳转存根

最近我反汇编了一个DLL(用c/c ++编写)并注意到代码段中有很多"跳转存根".这些存根只会跳转到DLL中的函数.

例如:

jmp foo() 
jmp foo2()
...
Run Code Online (Sandbox Code Playgroud)

为什么编译器(Visual Studio 2012)在二进制文件中包含这些函数存根?

谢谢!

c++ windows reverse-engineering portable-executable

4
推荐指数
1
解决办法
550
查看次数

进程终止回调

我编写了一个代码,能够使用映射文件生成自己的覆盖数据,而无需另外的应用程序调试它,并且还能够生成与Cobertura报告和OpenCover兼容的xml报告,以进行进一步的分析和图形报告.

事情是,到目前为止,我必须调用函数来手动生成报告,并且想法是在流程退出时自动生成报告.

我的第一种方法是尝试在RtlExitUserProcess/RtlExitUserThread/ExitProcess中编写钩子但是每个函数都覆盖一些特定的情况,如果你强制进程结束(例如使用taskkill终止它)或者用CTRL + C关闭应用程序控制台窗口的行为变化.

有什么办法可以创建一个可靠的回调,当应用程序即将结束时,它总会被调用吗?就像在调试另一个应用程序时一样,当进程终止时,您会收到一个包含详细信息的调试事件.

提前致谢

delphi assembly reverse-engineering

4
推荐指数
1
解决办法
533
查看次数

从现有数据库自动生成JHipster实体

作为JHispster 2.11.0的一部分,实体配置保存在.jhipster目录中的特定.json文件中.这些文件可用于使用以下命令在JHipster应用程序中重新生成实体和相关文件.

哟jhipster:实体ENTITY_NAME

有没有办法从现有数据库自动生成那些.json文件?

entity-framework reverse-engineering jhipster

4
推荐指数
1
解决办法
5411
查看次数

EBX寄存器用于存储器访问的这种模式是什么?

我正在学习逆向工程的基础.在扭转裂缝的同时,在几乎所有功能的开头都看到了这种模式:

pushl %ebp                            
movl  %esp, %ebp              
pushl %ebx              # because ebx is a callee-saved register
subl  $0x14,%esp        # of course $0x14 changes depending on the function
calll 0x08048766
addl  $0x1a5f, %ebx     # also this value sometime changes depending on the function
Run Code Online (Sandbox Code Playgroud)

哪里0x08048766有一个函数可以做到这一点:

movl 0(%esp), %ebx         
retl 
Run Code Online (Sandbox Code Playgroud)

所以基本上,正常情况下,每个函数首先初始化寄存器ebpesp.然后寄存器ebx被推入堆栈,这也是完全可以理解的,因为ebx是被调用者保存的寄存器,稍后在函数中使用它来引用一些静态数据(来自.rodata),例如:

leal  -0x17b7(%ebx), %eax
movl  %eax, 0(%esp) 
calll printf   
Run Code Online (Sandbox Code Playgroud)

现在最有趣的(对我而言)部分:如果我已经正确理解,ebx首先用指向的值初始化esp(这使用函数at 0x08048766),为什么?里面有什么?这不是一个未初始化的点到堆栈中吗?

然后添加另一个值ebx.这个值代表什么?

我想更好地理解ebx在这种情况下如何使用寄存器,以及如何计算它指向的地址. …

x86 reverse-engineering cpu-registers

4
推荐指数
1
解决办法
840
查看次数

从给定的x86程序集编写C函数

我正试图逆向设计这个神秘功能.此函数返回一个整数,并将struct节点作为参数

#include "mystery.h"
int mystery(struct e4_struct *s){}
Run Code Online (Sandbox Code Playgroud)

头文件是一个简单的结构声明

struct my_struct {
    int a;
    int b; 
};
Run Code Online (Sandbox Code Playgroud)

我试图逆向工程的组件是

400596:    8b 07                    mov    (%rdi),%eax
400598:    8d 04 40                 lea    (%rax,%rax,2),%eax
40059b:    89 07                    mov    %eax,(%rdi)
40059d:    83 47 04 07              addl   $0x7,0x4(%rdi)
4005a1:    c3                       retq  
Run Code Online (Sandbox Code Playgroud)

到目前为止,我认为功能如下:

int mystery(struct m_struct *s){
    int i = s->a;
    i = 3*i;
    int j = s->b;
    j += 7;
    return i;
}
Run Code Online (Sandbox Code Playgroud)

但这不正确.我不明白究竟mov %eax,(%rdi)是什么以及函数最终返回的是什么因为它应该返回和整数.

c assembly gcc reverse-engineering x86-64

4
推荐指数
1
解决办法
123
查看次数