首页
论坛
课程
招聘
IDA反编译插件生成的c文件无法编译
2021-2-22 16:09 1369

IDA反编译插件生成的c文件无法编译

2021-2-22 16:09
1369

试过hex ray, retdec, snowman  生成c文件没问题;可这c文件根本无法编译,建立vs工程,不论哪个都是一堆报错,未定义的函数,语法错误,数不清的警告;到底有没有“能用”的反编译插件呢? 

我还给retdec的GitHub提了issue 几天过去了没人鸟我。

按我的理解,反编译应该是给定任意exe,输出c文件,加上必要的头文件,无需任何修改即可编译得到另一个exe,这2个exe功能应该完全一样才对吧?难道说市面上的插件只是反编译出来“看看”而已,根本不是可以编译的?


看雪学院推出的专业资质证书《看雪安卓应用安全能力认证 v1.0》(中级和高级)!

收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 56
活跃值: 活跃值 (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
夜的静night 活跃值 2021-2-22 17:09
2
0
反编译只是看具体流程  功能需要自己分析。。。
雪    币: 600
活跃值: 活跃值 (1107)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ericyudatou 活跃值 2021-2-22 17:19
3
0
反编译出来的是伪代码……顶多看看流程
雪    币: 106
活跃值: 活跃值 (291)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zbzb 活跃值 2021-2-22 17:23
4
0

https://github.com/nihilus/hexrays_tools/blob/master/code/defs.h
hexray F5之后的代码,编译的时候加头文件defs.h了吗?

最后于 2021-2-22 17:25 被zbzb编辑 ,原因:
雪    币: 85
活跃值: 活跃值 (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lolikon 活跃值 2021-2-22 23:35
5
0
zbzb https://github.com/nihilus/hexrays_tools/blob/master/code/defs.hhexray F5之后的代码,编译的时候加头文件defs.h了吗?

不行的啦。
而且那个defs头文件里面本身就有警告,和xx冲突。
我用vs写了一个hello world 反编译出来的东西都编不过。。。

不知道ida的人是用哪个版本的vs,我用的是2019.我也试过几个版本的defs.h, 都是这个lobyte重定义了


1>D:\code\c++\testexe\testexe\defs.h(75,1): warning C4005: 'LOBYTE': macro redefinition
1>D:\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h(206): message : see previous definition of 'LOBYTE'
1>D:\code\c++\testexe\testexe\defs.h(76,1): warning C4005: 'LOWORD': macro redefinition
1>D:\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h(204): message : see previous definition of 'LOWORD'
1>D:\code\c++\testexe\testexe\defs.h(78,1): warning C4005: 'HIBYTE': macro redefinition
1>D:\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h(207): message : see previous definition of 'HIBYTE'
1>D:\code\c++\testexe\testexe\defs.h(79,1): warning C4005: 'HIWORD': macro redefinition
1>D:\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h(205): message : see previous definition of 'HIWORD'
1>D:\code\c++\testexe\testexe\1.c(21,16): error C2143: syntax error: missing '{' before '__cdecl'
1>D:\code\c++\testexe\testexe\1.c(24,22): error C2018: unknown character '0x60'
1>D:\code\c++\testexe\testexe\1.c(24,33): warning C4229: anachronism used: modifiers on data are ignored
1>D:\code\c++\testexe\testexe\1.c(24,33): error C2061: syntax error: identifier 'namespace'
1>D:\code\c++\testexe\testexe\1.c(24,33): error C2059: syntax error: ';'
1>D:\code\c++\testexe\testexe\1.c(24,42): error C2001: newline in constant
1>D:\code\c++\testexe\testexe\1.c(24,42): error C2015: too many characters in constant
1>D:\code\c++\testexe\testexe\1.c(24,42): error C2059: syntax error: 'constant'
1>D:\code\c++\testexe\testexe\1.c(26,57): error C2146: syntax error: missing ')' before identifier 'mode'
1>D:\code\c++\testexe\testexe\1.c(26,57): error C2061: syntax error: identifier 'mode'
1>D:\code\c++\testexe\testexe\1.c(26,57): error C2059: syntax error: ';'
1>D:\code\c++\testexe\testexe\1.c(26,61): error C2059: syntax error: ')'
1>D:\code\c++\testexe\testexe\1.c(27,29): error C2143: syntax error: missing ')' before '*'
1>D:\code\c++\testexe\testexe\1.c(27,29): error C2143: syntax error: missing '{' before '*'
1>D:\code\c++\testexe\testexe\1.c(27,43): error C2059: syntax error: 'type'
1>D:\code\c++\testexe\testexe\1.c(27,85): error C2059: syntax error: ')'
1>D:\code\c++\testexe\testexe\1.c(29,29): error C2143: syntax error: missing ')' before '*'
1>D:\code\c++\testexe\testexe\1.c(29,29): error C2143: syntax error: missing '{' before '*'
1>D:\code\c++\testexe\testexe\1.c(29,43): error C2059: syntax error: 'type'
1>D:\code\c++\testexe\testexe\1.c(29,85): error C2059: syntax error: ')'
1>D:\code\c++\testexe\testexe\1.c(48,55): error C2143: syntax error: missing ')' before '*'
1>D:\code\c++\testexe\testexe\1.c(48,55): error C2143: syntax error: missing '{' before '*'
1>D:\code\c++\testexe\testexe\1.c(48,58): error C2059: syntax error: ')'
1>D:\code\c++\testexe\testexe\1.c(219,31): warning C4013: '__CheckForDebuggerJustMyCode' undefined; assuming extern returning int
1>D:\code\c++\testexe\testexe\1.c(225,29): error C2143: syntax error: missing ')' before '*'
1>D:\code\c++\testexe\testexe\1.c(225,29): error C2143: syntax error: missing '{' before '*'
1>D:\code\c++\testexe\testexe\1.c(225,43): error C2059: syntax error: 'type'
1>D:\code\c++\testexe\testexe\1.c(225,85): error C2059: syntax error: ')'
1>D:\code\c++\testexe\testexe\1.c(260,8): error C2065: 'FILE': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(260,11): error C2065: 'v1': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(260,8): warning C4552: '*': result of expression not used
1>D:\code\c++\testexe\testexe\1.c(265,6): error C2065: 'v1': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(265,22): warning C4013: '_acrt_iob_func' undefined; assuming extern returning int
1>D:\code\c++\testexe\testexe\1.c(266,20): warning C4013: 'sub_411393' undefined; assuming extern returning int
1>D:\code\c++\testexe\testexe\1.c(266,23): error C2065: 'v1': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(279,18): error C2065: '_crt_argv_mode': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(279,18): error C2146: syntax error: missing ';' before identifier 'v0'
1>D:\code\c++\testexe\testexe\1.c(279,20): error C2065: 'v0': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(281,6): error C2065: 'v0': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(282,34): warning C4013: 'j__configure_narrow_argv' undefined; assuming extern returning int
1>D:\code\c++\testexe\testexe\1.c(282,37): error C2065: 'v0': undeclared identifier
1>D:\code\c++\testexe\testexe\1.c(373,19): warning C4133: '=': incompatible types - from 'char *' to 'uint32 *'
1>D:\code\c++\testexe\testexe\1.c(394,19): warning C4133: '=': incompatible types - from 'char *' to 'uint32 *'
1>D:\code\c++\testexe\testexe\1.c(410,55): error C2143: syntax error: missing ')' before '*'
1>D:\code\c++\testexe\testexe\1.c(410,55): error C2143: syntax error: missing '{' before '*'
1>D:\code\c++\testexe\testexe\1.c(410,58): error C2059: syntax error: ')'
1>D:\code\c++\testexe\testexe\1.c(411,1): error C2054: expected '(' to follow 'a1'
1>D:\code\c++\testexe\testexe\1.c(414,10): error C2018: unknown character '0x60'
1>D:\code\c++\testexe\testexe\1.c(414,30): error C2001: newline in constant
1>D:\code\c++\testexe\testexe\1.c(414,30): error C2015: too many characters in constant
1>D:\code\c++\testexe\testexe\1.c(421,32): warning C4018: '<=': signed/unsigned mismatch
1>D:\code\c++\testexe\testexe\1.c(427,39): warning C4018: '>': signed/unsigned mismatch
1>Done building project "testexe.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

最后于 2021-2-22 23:37 被lolikon编辑 ,原因:
雪    币: 824
活跃值: 活跃值 (260)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
老伙计 活跃值 2021-2-22 23:42
6
0

        无法编译就对了,如果反编译插件真的这么厉害,那这世上不是人人都可以做 Hexray IDA 的主人了?这天下还不早就乱套了?

最后于 2021-2-22 23:46 被老伙计编辑 ,原因:
雪    币: 823
活跃值: 活跃值 (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
b!@nk 活跃值 2021-2-23 00:10
7
0
你不知道所有反编译出来的c代码都是不全的吗?一看你就是没有怎么接触过逆向,不知道ida以及其他的c代码有时候和汇编是对应不上的?何况还有各种无法反编译的情况。你这时候导出c导了个寂寞?
雪    币: 425
活跃值: 活跃值 (250)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
茅山小僧 活跃值 2021-2-23 08:37
8
0
如果F5那么牛逼,岂不人人都是Reverse engineer
雪    币: 623
活跃值: 活跃值 (379)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
半杯凉茶 活跃值 2021-2-23 16:39
9
0
不要神化F5
雪    币: 85
活跃值: 活跃值 (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lolikon 活跃值 2021-2-24 15:54
10
0
我是做c++开发的,非逆向;最近研究一下逆向,确实是新手;但是我不知道你们为何如此统一的认为“反编译插件本来就做不到生成能编译的c文件”。。。

这么看来我也不用继续找其他反编译插件了,我自己研究研究吧
游客
登录 | 注册 方可回帖
返回