有没有办法将汇编语言转换为某种高级语言? 我正在尝试使用linux端口来检索学校标记。应用程序从服务器下载文件,然后以某种方式解密它。它是用delphi编写的,但在反编译后我得到了汇编语言。汇编语言对我来说完全不为人知。 以下是我认为负责解密的程序:https://gist.github.com/1240056 如果有任何其他方法如何找出使用过的算法,我将非常感谢你。
答案 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 pro和it's plugin。
但它不会帮助你在linux上移植proggy。 分析逻辑,最好做新的实现。