我想学习.vce格式.它是一种二进制格式,看起来比简单的对象序列化更复杂.是否存在分析二进制格式的任何工具或技术?
在对自己进行实验之后,我确信java代码的阻塞在防止反向代码工程方面并不安全.所以,我转而使用Launch4J将我的一个核心jar文件捆绑到一个EXE文件中.jar文件也包含主要的入口方法.这是否会再次保护代码逆向工程?
这就是我正在做的事情:
现在,如果我从提取的src文件夹中复制Runtime.java并使用javac.exe进行编译而不进行任何修改,然后将其放入解压缩的rt文件夹中,最后使用jar.exe将所有内容放回到jar文件中,一切都按预期工作.JRE运行良好.
但是,如果我对Runtime.java进行最轻微的更改并将其编译并放入rt.jar,那么只要我尝试启动它,JRE就会崩溃.这是导致无声崩溃的轻微更改的示例:
/** Don't let anyone else instantiate this class */
private Runtime() {
System.out.println("This is a test.");
}
Run Code Online (Sandbox Code Playgroud)
代替:
/** Don't let anyone else instantiate this class */
private Runtime() {}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么这会导致我的JRE崩溃?
提前致谢.
我尝试用我糟糕的装配技巧来分析一个dll文件,所以请原谅我,如果我无法实现非常微不足道的事情.我的问题是,在调试应用程序时,我发现我只在调试会话中寻找的代码,在我停止调试器后,地址消失了.dll看起来不会被混淆,因为许多代码都是可读的.看一下截图.我正在寻找的代码位于debug376部分的地址07D1EBBF.BTW,我在哪里获得这个debug376部分?
所以我的问题是,如何在不调试的情况下找到此功能?谢谢
UPDATE
好吧,正如我所说,一旦我停止调试器,代码就会消失.我甚至无法通过字节序列找到它(但我可以在调试模式下).当我启动调试器时,代码不会立即被反汇编,我应该在那个地方添加一个硬件断点,只有当断点被击中时,IDA才会显示反汇编的代码.看一下这个截图 您会看到我感兴趣的代码行,如果程序没有在调试模式下运行,则该代码行不可见.我不确定,但我认为它类似于在运行时解包代码,这在设计时是不可见的.
无论如何,任何帮助将不胜感激.我想知道为什么代码被隐藏,直到断点命中(它显示为"db 8Bh"等)以及如何在没有调试的情况下找到该地址(如果可能).BTW,这可能是来自不同模块(dll)的代码吗?
谢谢
更新2
我发现debug376是在运行时创建的一个段.这么简单的问题:我怎样才能找到这个细分来自哪里:)
我可以gdb使用disas functionname命令找到函数的起始地址.
如何使用WinDBG执行相同的操作?
我必须为使用加密狗激活的程序开发一个插件.我想知道我可以破解usb的密钥还是别的什么?
我正在开发一个必须部署在具有root访问权限的客户端的私有云服务器上的软件程序.我可以通过安全端口与软件进行通信.
我想阻止客户对我的程序进行逆向工程,或者至少让它"足够难".以下是我的方法:
我认为这种方法可以阻止root用户:
使用调试器对我的代码进行反向工程
反复运行程序以检查输出
我的问题是:这个设计的弱点是什么?root用户如何攻击它?
我正在研究一个混淆的二进制文件作为crackme挑战的一部分.它得到的序列push,pop并nop指令(该指令将重复数千次).从功能上讲,这些块对程序没有任何影响.但是,他们非常努力地生成CFG和逆转过程.
有关于如何将指令更改为nop的解决方案,以便我可以删除它们.但在我的情况下,我想完全剥离这些指令,以便我可以更好地了解CFG.如果指令被剥离,我理解必须修改内存偏移量.据我所知,没有工具可以直接实现这一目标.
我正在使用IDA Pro评估版.我也对使用其他逆向工程框架的解决方案持开放态度.如果它是可编写脚本的,则是可取的.
我经历了一个类似的问题但是,建议的解决方案不适用于我的情况.
为什么GCC编译器在使用double时会添加这三行而在有Int时不添加?
使用int:
#include <cstdio>
int main(){
int i = 1;
}
Run Code Online (Sandbox Code Playgroud)
==>
main:
push ebp
mov ebp, esp
sub esp, 16
mov DWORD PTR [ebp-4], 1
mov eax, 0
leave
ret
Run Code Online (Sandbox Code Playgroud)
双倍:
#include <cstdio>
int main(){
double i = 1;
}
Run Code Online (Sandbox Code Playgroud)
==>
main:
lea ecx, [esp+4] // This three lines
and esp, -8 // ...
push DWORD PTR [ecx-4] // ...
push ebp
mov ebp, esp
push ecx
sub esp, 20
fld1
fstp QWORD PTR [ebp-16]
mov eax, 0
add …Run Code Online (Sandbox Code Playgroud) 别担心,我不会要求答案.
我试图在一个简单的1函数32位exe中找到一个隐藏的字符串(可能是一封电子邮件?)
我已经在文件上运行了字符串,没有用.
我已经将文件反编译为ASCII并找到了主要功能.
文件显示它是GCC可执行文件.
这是主要功能的asm:
; ================ B E G I N N I N G O F P R O C E D U R E ================
; Variables:
; arg_0: int, 4
main:
080489cc lea ecx, dword [esp+arg_0] ; Begin of unwind block (FDE at 0x80d6cb8), DATA XREF=_start+23
080489d0 and esp, 0xfffffff0
080489d3 push dword [ecx-4]
080489d6 push ebp
080489d7 mov ebp, esp
080489d9 push esi
080489da push ebx
080489db push ecx
080489dc sub esp, 0x2c
080489df …Run Code Online (Sandbox Code Playgroud)