首页
社区
课程
招聘
未解决 IDA反编译插件生成的c文件无法编译
发表于: 2021-2-22 16:09 5180

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

2021-2-22 16:09
5180

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

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

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 786
活跃值: (1621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
反编译只是看具体流程  功能需要自己分析。。。
2021-2-22 17:09
0
雪    币: 1189
活跃值: (4817)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
反编译出来的是伪代码……顶多看看流程
2021-2-22 17:19
0
雪    币: 59
活跃值: (1606)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

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

最后于 2021-2-22 17:25 被zbzb编辑 ,原因:
2021-2-22 17:23
0
雪    币: 220
活跃值: (493)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
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编辑 ,原因:
2021-2-22 23:35
0
雪    币: 807
活跃值: (2353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

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

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

这么看来我也不用继续找其他反编译插件了,我自己研究研究吧
2021-2-24 15:54
0
雪    币: 3126
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
计算机是老外发明的,好家伙,人老外这么多年都不能一键将exe完全还原成可重编译的工程,到你这你觉得你要研究多少年?
2021-4-7 07:52
0
雪    币: 340
活跃值: (927)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
12
头文件是cpp的,你用c去编译,当然一堆报错了。
2021-4-7 09:21
0
雪    币: 1507
活跃值: (853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我也想实现重新编译的功能
2021-4-7 10:08
0
游客
登录 | 注册 方可回帖
返回
//