鱼C论坛

 找回密码
 立即注册
查看: 514|回复: 13

[已解决]请问一下E2C如何使用

[复制链接]
发表于 2022-11-13 11:06:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2022-11-13 20:40 编辑

rt,现在有了dosbox,e2c,要反编译的exe文件,下一步该怎么做呢?

比如,要反编译的exe文件为 a.exe,我在dosbox中执行 e2c a.exe 给我提示Can't open file "a.exe.GLB",还把我 a.exe 给删了,e2c到底怎么用啊
最佳答案
2022-11-13 14:26:43
你一定会失望的
一个简单的hello world程序,反编译出来的代码2000多行,怎么样?
失望吧?

1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-13 11:28:30 | 显示全部楼层

  1. EXE文件反编译成C源代码的工具软件简介

  2. EXEC-2-C是一个反汇编到 C 的软件,包含以下文件

  3. - E2A.EXE - 反汇编
  4. - A2APARSE.EXE - 汇编预处理
  5. - E2C.EXE - 转换 A2A.EXE 的结果到 pseudo-C
  6. - ENVMNU.EXE - 前几个文件的集成环境
复制代码


https://xiazai.zol.com.cn/detail/50/494618.shtml
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-13 11:36:05 | 显示全部楼层
人造人 发表于 2022-11-13 11:28
https://xiazai.zol.com.cn/detail/50/494618.shtml

不是,具体命令怎么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 13:29:31 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-13 13:53 编辑
zhangjinxuan 发表于 2022-11-13 11:36
不是,具体命令怎么用


       运行 "envmnu.exe" 进入集成环境
  1.       input file     name :  t.exe                 <--- 在这里输入 exe 文件名
  2.       Assembler file name :  t.ASM                 <--- 这个文件名会自动产生
  3.       Pseudo-C  file name :  t.R                   <--- 这个文件名会自动产生
复制代码

      输入 "t.exe",按 1 次回车,再按下 F10 生成反编译文件,然后,退出 IDE,目录内新添加的文件 "t.R" 就是你所要的伪 C 源代码文件。
      这个文件内容看上去是这个样子:
  1. *
  2. ***************************************************************************
  3. *                                                                         *
  4. *    This file was prepared by EXEC-2-C code restoration utility Ver 0.1  *
  5. *    Copywrite (c) The Austin Code Works & Polyglot International         *
  6. *                                Jerusalem, 1991                             *
  7. *                                                                         *
  8. ***************************************************************************
  9. */

  10. #include       "EXEC-2-C.H"

  11. char var1_0 [ 129 ] = "19751976197719781979198019811982198319841985198619"
  12.                       "8719881989199019911992199319941995\x10\0\0\x16\0~\x01\0L\0V\t\0@\0\x80"
  13.                       ">\0\xa6\0\x91\xc3\0\xc7\x01\x81$\x02\x8a\x03|G\x05\xeb\t\xcaB\x0c\x18\x128\x1f\x1cX*";
  14. Byte var1_9c [ 47 ] = {
  15.          40,  68,  57,  0,  40,  240,  70,  0,  104,  151,
  16.          90,  0,  3,  0,  7,  0,  9,  0,  13,  0,
  17.          28,  0,  38,  0,  130,  0,  220,  0,  220,  1,
  18.          10,  3,  233,  3,  162,  5,  210,  8,  233,  10,
  19.          197,  15,  3,  22,  34,  32,  22
  20.         };
  21. char var1_cb [ 1045 ] = "-^8\x99;\x88E";
  22. char var2_0 [ 5 ] = "year ";
  23. char var2_5 [ 5 ] = "summ ";
  24. char var2_a [ 11 ] = "ne ?? year ";
  25. char var2_15 [ 315 ] = "summ ne ?? year summ ne ?? year summ ne ?? year su"
  26.                       "mm ne ?? year summ ne ?? year summ ne ?? year summ"
  27.                       " ne ?? year summ ne ?? year summ ne ?? year summ n"
  28.                       "e ?? year summ ne ?? year summ ne ?? year summ ne "
  29.                       "?? year summ ne ?? year summ ne ?? year summ ne ??"
  30.                       " year summ ne ?? year summ ne ?? year summ ne ?? y"
  31.                       "ear summ ne ?? ";
  32. char var4_3 [ 10 ] = "PSQRVW\x1e\x06\x07\x1f";
  33. char var4_d [ 10 ] = "_^ZY[X\x8b\xe5]\xc3";
  34. Byte var4_a4 [ 11 ] = {
  35.          80,  86,  87,  30,  6,  197,  118,  4,  252,  180,
  36.          2
  37.         };


  38. /*======== Code section prepared by EXEC-2-C code restoration utility =======*/



  39. /****************************************************************************/
  40.                 near proc_1()
  41. /****************************************************************************/
  42. {

  43.         push(ax);
  44.         ax = 0;
  45.         geninterrupt(0x16);        /*  BIOS Service func ( ah ) = 0 */
  46.                                 /*  Read next kbd char */
  47.                                 /*  Output: AH-scan code AL-char code */
  48.                                
  49.         ax = pop();
  50. }

  51. /****************************************************************************/
  52.                 near proc_2()
  53. /****************************************************************************/
  54. {

  55.         push(ax);
  56.         push(bx);
  57.         push(cx);
  58.         push(dx);
  59.         push(ds);
  60.         bx = 0;
  61.         ax =  - 0x4800;  /*PCH : RM_Table_init*/
  62.         cx = 0x7D0;  /*PCH : RM_Table_init*/
  63.        
  64. label_11:
  65.         do   
  66.                 *bx = al;
  67.         while(bx = bx + 2, --cx != 0);
  68.         bh = 0;
  69.         dx = 0;
  70.         ah = 2;  /*PCH : RM_Table_init*/
  71.         geninterrupt(0x10);        /*  BIOS Service func ( ah ) = 2 */
  72.                                 /*  Set cursor pos */
  73.                                 /*  Input: BH-page DH-row DL-clmn */
  74.                                
  75.         ds = pop();
  76.         dx = pop();
  77.         cx = pop();
  78.         bx = pop();
  79.         ax = pop();
  80. }
  81. . . . . . .
  82. /****************************************************************************/
  83.                 far main()
  84. /****************************************************************************/
  85. {

  86.        
  87.         ax = DATA_SEG_1;
  88.         ds = ax;
  89.         ax = DATA_SEG_2;
  90.         es = ax;
  91.         proc_5();
  92.         bx = 0;
  93.         push(bx);
  94.         push(0x15);
  95.         proc_2();
  96.         do   {
  97.                 push(*( Word *)MK_FP(es , bx + 0xA));
  98.                 proc_4();
  99.                 sp = sp + 2;
  100.                 proc_3();
  101.         }        while(bx = bx + 0x10, --cx != 0);
  102.         proc_1();
  103.         proc_3();
  104.         cx = pop();
  105.         bx = pop();
  106.         do   {
  107.                 push(*( Word *)MK_FP(es , bx + 0xD));
  108.                 proc_4();
  109.                 sp = sp + 2;
  110.                 proc_3();
  111.         }        while(bx = bx + 0x10, --cx != 0);
  112.         proc_1();
  113.         ax = 0x4C00;  /*PCH : RM_Table_init*/
  114.         geninterrupt(0x21);        /*  DOS func ( ah ) = 4Ch */
  115.                                 /*  Terminate process */
  116.                                 /*  Input: AL-ret code */
  117.                                
  118. }
复制代码

         实际内容还是汇编语言样子,这或许和 t.exe 本来就不是一个 C 语言编译出来的代码有关?
        会不会让你失望呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 14:26:43 | 显示全部楼层    本楼为最佳答案   
你一定会失望的
一个简单的hello world程序,反编译出来的代码2000多行,怎么样?
失望吧?

1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 15:14:07 From FishC Mobile | 显示全部楼层
人造人 发表于 2022-11-13 14:26
你一定会失望的
一个简单的hello world程序,反编译出来的代码2000多行,怎么样?
失望吧?

        最让人崩溃的是,里面居然找不到 printf() 的函数调用和 “hello, world!\n” 的字符串,完全看不出这玩意和你的源程序到底有什么关系。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 15:42:52 | 显示全部楼层
jackz007 发表于 2022-11-13 15:14
最让人崩溃的是,里面居然找不到 printf() 的函数调用和 “hello, world!\n” 的字符串,完全看 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 16:11:23 | 显示全部楼层
jackz007 发表于 2022-11-13 15:14
最让人崩溃的是,里面居然找不到 printf() 的函数调用和 “hello, world!\n” 的字符串,完全看 ...

"hello, world!\n" 字符串倒是 “有”,只是这个代码无法通过tc编译器的编译

1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 16:26:27 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-13 16:31 编辑
人造人 发表于 2022-11-13 16:11
"hello, world!\n" 字符串倒是 “有”,只是这个代码无法通过tc编译器的编译


        我们写的代码其实只是这个反编译代码中很小的一部分,TC 编译器除了要连接我们自己代码生成的 obj 以外,还要附加链接编译器提供的其他 obj 文件,这个 obj 文件才是真正的大头。我们所写的 main 函数只不过是这个 obj 需要调用的一个 function 而已。所以,如果要重新编译这个反编译的代码,需要从中识别和提取属于 main() 的代码,把属于启动 obj 的代码剥离掉。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
人造人 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 17:35:14 | 显示全部楼层
我发现了另外一个工具 ghidra
感觉还可以

1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png


  1. undefined8 FUN_001013a0(long **param_1,ulong param_2,void *param_3,void *param_4)
  2. {
  3.   undefined8 uVar1;
  4.   ulong uVar2;
  5.   void **__ptr;
  6.   void *pvVar3;
  7.   ulong local_28;
  8.   long **local_18;
  9.   
  10.   if (param_1 == (long **)0x0) {
  11.     uVar1 = 0;
  12.   }
  13.   else {
  14.     uVar2 = FUN_001016ea(param_1);
  15.     if (uVar2 < param_2) {
  16.       uVar1 = 0;
  17.     }
  18.     else {
  19.       local_28 = param_2;
  20.       local_18 = param_1;
  21.       if (param_3 == (void *)0x0) {
  22.         uVar1 = 0;
  23.       }
  24.       else {
  25.         while (local_28 != 0) {
  26.           local_18 = (long **)(*local_18 + 2);
  27.           local_28 = local_28 - 1;
  28.         }
  29.         __ptr = (void **)malloc(0x18);
  30.         if (__ptr == (void **)0x0) {
  31.           uVar1 = 0;
  32.         }
  33.         else {
  34.           pvVar3 = malloc((size_t)param_4);
  35.           *__ptr = pvVar3;
  36.           if (*__ptr == (void *)0x0) {
  37.             free(__ptr);
  38.             uVar1 = 0;
  39.           }
  40.           else {
  41.             memcpy(*__ptr,param_3,(size_t)param_4);
  42.             __ptr[1] = param_4;
  43.             __ptr[2] = *local_18;
  44.             *local_18 = (long *)__ptr;
  45.             param_1[1] = (long *)((long)param_1[1] + 1);
  46.             uVar1 = 1;
  47.           }
  48.         }
  49.       }
  50.     }
  51.   }
  52.   return uVar1;
  53. }
复制代码

  1. char FUN_0010134d(long param_1)
  2. {
  3.   char cVar1;
  4.   char local_9;
  5.   
  6.   if (param_1 == 0) {
  7.     local_9 = '\0';
  8.   }
  9.   else {
  10.     local_9 = '\x01';
  11.     while ((cVar1 = FUN_0010170a(param_1), cVar1 != '\x01' && (local_9 != '\0'))) {
  12.       local_9 = FUN_001014cf(param_1,0);
  13.     }
  14.   }
  15.   return local_9;
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-13 17:42:24 | 显示全部楼层
一路 if-else 到底
一点也不智能,^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-13 18:03:57 | 显示全部楼层
人造人 发表于 2022-11-13 17:42
一路 if-else 到底
一点也不智能,^_^

我先研究下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 15:12:34 | 显示全部楼层
人造人 发表于 2022-11-13 17:35
我发现了另外一个工具 ghidra
感觉还可以

哇,好看!
这是什么系统?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 22:29:46 | 显示全部楼层
liuhongrun2022 发表于 2023-7-19 15:12
哇,好看!
这是什么系统?

archlinux + i3-wm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 10:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表