Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于ghidra的decompile.py文件的问题 #31

Open
chenkai1999 opened this issue Oct 9, 2024 · 12 comments
Open

关于ghidra的decompile.py文件的问题 #31

chenkai1999 opened this issue Oct 9, 2024 · 12 comments

Comments

@chenkai1999
Copy link

作者您好,我想试着您v2模型方案尝试逆向c代码。按照流程,操作如下cd LLM4Decompile/ghidra
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.0.3_build/ghidra_11.0.3_PUBLIC_20240410.zip
unzip ghidra_11.0.3_PUBLIC_20240410.zip。
然后decompile.py里面from ghidra.app.decompiler import DecompInterface、from ghidra.util.task import ConsoleTaskMonitor没有app和util。运行demo.py后报错如下:
D:\Code\LLM4Decompile\venv\Scripts\python.exe D:\Code\LLM4Decompile\ghidra\demo.py
Traceback (most recent call last):
File "D:\Code\LLM4Decompile\ghidra\demo.py", line 40, in
result = subprocess.run(command, text=True, capture_output=True, check=True)
File "C:\Python310\lib\subprocess.py", line 501, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Python310\lib\subprocess.py", line 966, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Python310\lib\subprocess.py", line 1435, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 不是有效的 Win32 应用程序
是需要额外安装操作吗?

@albertan017
Copy link
Owner

albertan017 commented Oct 9, 2024

模型只训练了x64-linux,不建议尝试使用这个模型反编译windows平台软件~
另外这个报错看起来像是ghidra的问题,可以对应平台版本问题:机器平台(win/linux/mac),二进制文件格式(pe/elf/mahco)

@chenkai1999
Copy link
Author

作者您好。是的,主要是ghidra的问题,项目ghidra目录下的decompile.py没有对应的from ghidra.app.decompiler import DecompInterface、from ghidra.util.task import ConsoleTaskMonitor。这个是按照readme里面安装就行了吗?还是有其他额外操作?

@albertan017
Copy link
Owner

albertan017 commented Oct 9, 2024

linux下按照文档步骤操作就可以了,这个import是ghidra调用这个script的时候内部环境import的,不是用户额外安装的。windows平台没有尝试过,手头上没有window环境,不太确定问题在哪里。可以试试使用windows的wsl:
https://learn.microsoft.com/en-us/windows/wsl/install
安装个linux在这个里面操作,很方便的

@chenkai1999
Copy link
Author

我这边windows平台测试了一下1.5v模型逆向效果,就是对稍长一些的代码进行逆向时间比较长;如果c运算复杂或者代码冗长一些,比如汇编代码400多行,可能就没办法逆向出来。

@albertan017
Copy link
Owner

是的,长度越长效果越差(本身长函数也比较困难)。另外v1.5训练数据偏短,asm平均200个token(估计一百行以内),我们正在重新采集数据,希望下一个版本可以更加实用~

@chenkai1999
Copy link
Author

作者您好,我在另外一台mac电脑上成功跑通了v2的代码。安卓的.so也是属于elf文件,也是咱们工程可以逆向范围吗?有没有demo可以直接逆向整个elf文件?

@albertan017
Copy link
Owner

项目只训练了x64-linux,安卓属于arm64-android,指令集和平台差异都很大。整个文件不太可行,长度一般超限。常见的做法是把函数切分出来,逐个函数反编译

@chenkai1999
Copy link
Author

咱们v2逆向模型有没有长度限制,目前我测试了个200行的函数,也能逆向出来

@chenkai1999
Copy link
Author

作者您好,还有一个问题,使用v2模型尝试逆向main函数的时候,我_fun0换成_main、main、__main,均显示 raise ValueError('bad case no function found')
ValueError: bad case no function found,这个是什么原因?

@albertan017
Copy link
Owner

v1.5/v2训练最大长度4096,不过训练数据主要是2000以内。

使用文档里面提示了,
Note: Replace func0 with the function name you want to decompile.
我将这句话再强调一下吧

@chenkai1999
Copy link
Author

是的,我是将所有的func0给替换成需要逆向的函数了。之前若干函数也成功测试过了。然后我想使用v2模型逆向一个main函数,就报如上错误(将demo里面的func0给替换成main了)。

@albertan017
Copy link
Owner

albertan017 commented Oct 9, 2024

objdump -d binary > binary.asm
然后直接手动把函数复制出来吧。demo里面本质上只是自动把函数切割,估计你的main名字被换了

可以用ghidra的图形界面看看main变成什么名字了,在图形界面里面直接把ghidra反编译结果复制出来

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants