汇编到高级语言转换

时间:2011-09-25 00:51:04

标签: delphi assembly reverse-engineering

有没有办法将汇编语言转换为某种高级语言? 我正在尝试使用linux端口来检索学校标记。应用程序从服务器下载文件,然后以某种方式解密它。它是用delphi编写的,但在反编译后我得到了汇编语言。汇编语言对我来说完全不为人知。 以下是我认为负责解密的程序:https://gist.github.com/1240056 如果有任何其他方法如何找出使用过的算法,我将非常感谢你。

4 个答案:

答案 0 :(得分:5)

Decompilers众所周知是不可靠的。在大多数情况下,在编译过程中会丢失太多信息以可靠地转换回源代码。要有机会完成所有工作,你必须使用一个反编译器(即,知道如何反转编译过程)语言,操作系统,以及理想情况下原始代码的编译器。但即使这样,产生的输出也不可能比汇编代码更清晰;和实际上可编译代码的反编译器极其罕见。

我建议您学习汇编代码并尝试以这种方式进行逆向工程,或者只是在wine中运行此程序。

答案 1 :(得分:2)

你提供的代码绝对不会自行解密,恕我直言。

这听起来像是一些高级UI的东西,并从互联网上检索的文本文件中获取一些内容,并刷新UI。里面没有解密循环。

解密肯定是一些内部调用,它从UI读取一些密码,然后调用从Internet检索一些数据,读取内容和更新UI。例如,检查0048E004方法(或另外一个call)。

搜索这样的模式:

@loop:
  mov al,[esi]
  xor al,...
  mov [edi],al
  inc esi
  inc edi
  dec ecx
  jnz @loop

或者

@loop:
  xor [edx],...
  inc edx
  dec ecx
  jnz @loop

然后可能会调用LStrCmp(例如字符串比较)。

当然,寄存器esi / edi / ecx / edx可以是局部变量[ebp + ...]或其他寄存器。但你可能会认识到这种模式。

这个循环加密可能要困难得多,但在加密/解密过程中总是有一个xor ...,...循环遍历所有字节。

我不是在谈论xor eax,eax行,实际上是eax := 0,但有些xor al,...不是...

答案 2 :(得分:0)

也许尝试自己编写一些代码来做你想做的事情,而不是从反编译的exe中重新创建代码。你想要的并不是那么复杂,所以你应该能够重新创造它。

如果您尝试解决加密问题,反编译不太可能对您有所帮助。

答案 3 :(得分:-1)

尝试了解IDA proit's plugin

但它不会帮助你在linux上移植proggy。 分析逻辑,最好做新的实现。