标签: reverse-engineering

用C++反向工程虚函数代码

我刚刚在VS2010上编译了以下内容(优化已关闭).

class Shape {
  public:
    int x,y;
    Shape() {
      x=10;
      y=20;
    }

    virtual void function1() {
      cout<<"function1";
    }

    virtual void function2() {
      cout<<"function2";
    }
};

int main() {
    Shape *s = new Shape();
    s->function1();
    s->function2();    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

反汇编不显示与虚函数对应的代码块或对它的任何调用,因此我假设这是因为使用vftable查找虚函数的方式.我正在使用IDA Pro,因此可能无法解决此类问题.如果我错了,请纠正我.

我在这方面也有一些疑问.

  1. 有没有什么办法可以像反汇编时的其他功能一样查看虚拟功能?我可以使用的任何脚本(IDAPython)/方法?
  2. 有什么办法可以列出可执行文件中的所有虚函数吗?
  3. 推荐读物?

c++ virtual-functions reverse-engineering

2
推荐指数
1
解决办法
1384
查看次数

Hibernate Tools可以使用注释而不是cfg.xml文件对数据库实体进行反向工程吗?

我有许多数据库表,我需要对POJO进行反向工程.我已经获得了创建裸POJO以及cfg.xml文件:

简单的POJO:

public class AddressType implements java.io.Serializable {
    private long addressId;
    private char addressType;
    private String addressDescription;
}        
Run Code Online (Sandbox Code Playgroud)

简单的cfg.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.mycompany.model.Addytyp" table="ADDYTYP" schema="XX" catalog="BANANA">
        <comment>Address Types</comment>
        <id name="addressType" type="char">
            <column name="ADDRESS_TYPE" length="1" />
            <generator class="assigned" />
        </id>
        <property name="addressId" type="long">
            <column name="ADDRESS_ID" precision="10" scale="0" not-null="true">
                <comment>Address ID</comment>
            </column>
        </property>
        <property name="addressDescription" type="string">
            <column name="ADDRESS_DESCRIPTION" length="25" not-null="true">
                <comment>Address Decription</comment>
            </column>
        </property>
    </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

我想知道的是,是否有一个设置或工具可以使用POJO中的列和ID信息作为注释对POJO进行反向工程而不是单独的文件?例如:

带注释的简单POJO:

@Table(name="ADDYTYP")
public class AddressType implements …
Run Code Online (Sandbox Code Playgroud)

java hibernate reverse-engineering

2
推荐指数
1
解决办法
3956
查看次数

我可以将"Objdump -S -d elf-file"生成的所有部分组合成一个具有重新组装功能的文件吗?

elf文件是静态链接的

目前objdump的输出是这样的:

Disassembly of section: .init:

xxxxxx

Disassembly of section: .plt:

xxxxxx

Disassembly of section: .text:

xxxxxx
Run Code Online (Sandbox Code Playgroud)

基本上我想要实现的是

"elf-file - (通过objdump反汇编) - >汇编文件 - (重新编译) - > 相同的功能 "

我不需要重新编译的二进制文件具有与原始二进制文件相同的二进制内容,只有相同的功能就足够了.

经过快速搜索,基本上答案是否定的,他们认为反汇编文件丢失了一些像符号信息或其他东西,但我认为通过静态链接,我可以摆脱这个问题......

谢谢!

assembly reverse-engineering elf objdump disassembly

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

是否有可能上传逆向工程APK?

我们正在开发一个Android应用程序.我们知道使用像APKTool,dex2jar这样的工具可以获得APK的源代码.

1)他们可以获得完整的源代码,以便他们可以轻松地重建相同的APK吗?

2)获取源代码后,其他人是否有可能以自己的名义上传重建的APK?

3)如果可能,如何防止这种情况?

我们的客户对此很感兴趣.

android decompiling reverse-engineering proguard apk

2
推荐指数
1
解决办法
368
查看次数

二进制炸弹阶段3卡住

老实说,我感到非常困惑,因为我的炸弹第三阶段看起来不像我的任何同学或教授给我的例子。任何帮助将不胜感激。我有我最近使用的终端机的一个副本,但在5个小时的大部分时间内我一直在努力尝试这一点,我已经知道了%d%d是所请求的布局,并且它要求2个数字,我相信其中一个是负数。由于这里有比较语句和jg

   0x08048fbb <+39>:    cmp    $0x1,%eax
   0x08048fbe <+42>:    jg     0x8048fc5 <phase_3+49>
Run Code Online (Sandbox Code Playgroud)

同样,它要求再次比较同一个值,我认为这是这里的第一个

   0x08048fc5 <+49>:    cmpl   $0x7,-0xc(%ebp)
   0x08048fc9 <+53>:    ja     0x8049032 <phase_3+158>
Run Code Online (Sandbox Code Playgroud)

让我失望的是,所有的加法和减法都是蝙蝠,总的来说,所有加法和减法都挤在了底部。

我应该在哪里找到可以与这些语句实际一起使用的值,如果我将它们加起来就等于多少。在这一点上,我什至不知道它是否正盯着我。所有比较如下

   0x08048fbb <+39>:    cmp    $0x1,%eax
Run Code Online (Sandbox Code Playgroud)

0x08048fbe <+42>:jg 0x8048fc5

 0x08048fc5 <+49>:    cmpl   $0x7,-0xc(%ebp)
   0x08048fc9 <+53>:    ja     0x8049032 <phase_3+158>

   0x0804903c <+168>:   cmpl   $0x5,-0xc(%ebp)
   0x08049040 <+172>:   jg     0x8049047 <phase_3+179>
Run Code Online (Sandbox Code Playgroud)

但目前我需要对此问题重新审视。如果有任何帮助,将不胜感激。

That's number 2.  Keep going!
0 1

Breakpoint 1, 0x08048f9a in phase_3 ()
(gdb) disas
Dump of assembler code for function phase_3:
   0x08048f94 <+0>:     push   %ebp
   0x08048f95 <+1>:     mov    %esp,%ebp
   0x08048f97 <+3>: …
Run Code Online (Sandbox Code Playgroud)

x86 assembly gdb reverse-engineering

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

PE文件格式的基本重定位表是什么?

我正在分析一个可执行文件的格式,在中找到了基本重定位表image_optional_header,这个基本重定位表是什么?

windows reverse-engineering malware malware-detection visual-c++

2
推荐指数
1
解决办法
3546
查看次数

通过重写c ++代码来防止Matlab代码的逆向工程?(在部署之前编译)

我的公司有一个用matlab编写的分析产品.我们想将其编译为可执行文件并出售给第三方.我们关注的一件事是代码被反向工程的可能性.

对编译的matlab代码进行反向工程是否很难?与编译的c ++代码相比,这样做有多难?因此,如果我们需要将所有内容转换为c ++,我们会做出决定,这显然会花费大量的劳动时间.

matlab reverse-engineering

2
推荐指数
1
解决办法
679
查看次数

更改包名称

我计划通过smali更改包名(反向)

当我打开apktool.yml时,我看到了这个

forced-package-id:'127'

我试图改变它,但它崩溃我为什么要这样做?

android reverse-engineering smali

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

为什么要将相同的值复制到他已经拥有的rax?

可有人向我解释为什么我们在移动值rax,以rdi在主函数中@0x6f5,然后在值复制rdi到的堆栈 get_v,然后转移回rax @0x6c8?也许它是x86-64的惯例,但我不理解它的逻辑.

 main:
   0x00000000000006da <+0>:     push   rbp
   0x00000000000006db <+1>:     mov    rbp,rsp
   0x00000000000006de <+4>:     sub    rsp,0x10
   0x00000000000006e2 <+8>:     mov    rax,QWORD PTR fs:0x28
   0x00000000000006eb <+17>:    mov    QWORD PTR [rbp-0x8],rax
   0x00000000000006ef <+21>:    xor    eax,eax
   0x00000000000006f1 <+23>:    lea    rax,[rbp-0xc]
 =>0x00000000000006f5 <+27>:    mov    rdi,rax
   0x00000000000006f8 <+30>:    call   0x6c0 <get_v>
   0x00000000000006fd <+35>:    mov    eax,0x0
   0x0000000000000702 <+40>:    mov    rdx,QWORD PTR [rbp-0x8]
   0x0000000000000706 <+44>:    xor    rdx,QWORD PTR fs:0x28
   0x000000000000070f <+53>:    je     0x716 <main+60>
   0x0000000000000711 <+55>:    call …
Run Code Online (Sandbox Code Playgroud)

x86 assembly gdb reverse-engineering x86-64

2
推荐指数
1
解决办法
656
查看次数

如何在Android APP中隐藏API URL和参数?

我很想知道如果没有用于混淆的商业产品,有什么方法可以安全地存储API网址和参数,这些都无法在逆向工程中编译?我已经尝试了所有我的应用程序和他们的API网址和代码很容易阅读.我担心安全问题.

obfuscation android reverse-engineering

2
推荐指数
3
解决办法
4593
查看次数