鱼C论坛

 找回密码
 立即注册
查看: 686|回复: 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 | 显示全部楼层
EXE文件反编译成C源代码的工具软件简介

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

- E2A.EXE - 反汇编
- A2APARSE.EXE - 汇编预处理
- E2C.EXE - 转换 A2A.EXE 的结果到 pseudo-C
- 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" 进入集成环境
      input file     name :  t.exe                 <--- 在这里输入 exe 文件名
      Assembler file name :  t.ASM                 <--- 这个文件名会自动产生
      Pseudo-C  file name :  t.R                   <--- 这个文件名会自动产生
      输入 "t.exe",按 1 次回车,再按下 F10 生成反编译文件,然后,退出 IDE,目录内新添加的文件 "t.R" 就是你所要的伪 C 源代码文件。
      这个文件内容看上去是这个样子:
*
 ***************************************************************************
 *                                                                         *
 *    This file was prepared by EXEC-2-C code restoration utility Ver 0.1  *
 *    Copywrite (c) The Austin Code Works & Polyglot International         *
 *                                Jerusalem, 1991                             *
 *                                                                         *
 ***************************************************************************
 */

#include       "EXEC-2-C.H"

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


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



/****************************************************************************/
                near proc_1()
/****************************************************************************/
{

        push(ax);
        ax = 0;
        geninterrupt(0x16);        /*  BIOS Service func ( ah ) = 0 */
                                /*  Read next kbd char */
                                /*  Output: AH-scan code AL-char code */
                                
        ax = pop();
}

/****************************************************************************/
                near proc_2()
/****************************************************************************/
{

        push(ax);
        push(bx);
        push(cx);
        push(dx);
        push(ds);
        bx = 0;
        ax =  - 0x4800;  /*PCH : RM_Table_init*/
        cx = 0x7D0;  /*PCH : RM_Table_init*/
        
label_11:
        do   
                *bx = al;
        while(bx = bx + 2, --cx != 0);
        bh = 0;
        dx = 0;
        ah = 2;  /*PCH : RM_Table_init*/
        geninterrupt(0x10);        /*  BIOS Service func ( ah ) = 2 */
                                /*  Set cursor pos */
                                /*  Input: BH-page DH-row DL-clmn */
                                
        ds = pop();
        dx = pop();
        cx = pop();
        bx = pop();
        ax = pop();
}
. . . . . .
/****************************************************************************/
                far main()
/****************************************************************************/
{

        
        ax = DATA_SEG_1;
        ds = ax;
        ax = DATA_SEG_2;
        es = ax;
        proc_5();
        bx = 0;
        push(bx);
        push(0x15);
        proc_2();
        do   {
                push(*( Word *)MK_FP(es , bx + 0xA));
                proc_4();
                sp = sp + 2;
                proc_3();
        }        while(bx = bx + 0x10, --cx != 0);
        proc_1();
        proc_3();
        cx = pop();
        bx = pop();
        do   {
                push(*( Word *)MK_FP(es , bx + 0xD));
                proc_4();
                sp = sp + 2;
                proc_3();
        }        while(bx = bx + 0x10, --cx != 0);
        proc_1();
        ax = 0x4C00;  /*PCH : RM_Table_init*/
        geninterrupt(0x21);        /*  DOS func ( ah ) = 4Ch */
                                /*  Terminate process */
                                /*  Input: AL-ret code */
                                
}
         实际内容还是汇编语言样子,这或许和 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

undefined8 FUN_001013a0(long **param_1,ulong param_2,void *param_3,void *param_4)
{
  undefined8 uVar1;
  ulong uVar2;
  void **__ptr;
  void *pvVar3;
  ulong local_28;
  long **local_18;
  
  if (param_1 == (long **)0x0) {
    uVar1 = 0;
  }
  else {
    uVar2 = FUN_001016ea(param_1);
    if (uVar2 < param_2) {
      uVar1 = 0;
    }
    else {
      local_28 = param_2;
      local_18 = param_1;
      if (param_3 == (void *)0x0) {
        uVar1 = 0;
      }
      else {
        while (local_28 != 0) {
          local_18 = (long **)(*local_18 + 2);
          local_28 = local_28 - 1;
        }
        __ptr = (void **)malloc(0x18);
        if (__ptr == (void **)0x0) {
          uVar1 = 0;
        }
        else {
          pvVar3 = malloc((size_t)param_4);
          *__ptr = pvVar3;
          if (*__ptr == (void *)0x0) {
            free(__ptr);
            uVar1 = 0;
          }
          else {
            memcpy(*__ptr,param_3,(size_t)param_4);
            __ptr[1] = param_4;
            __ptr[2] = *local_18;
            *local_18 = (long *)__ptr;
            param_1[1] = (long *)((long)param_1[1] + 1);
            uVar1 = 1;
          }
        }
      }
    }
  }
  return uVar1;
}
char FUN_0010134d(long param_1)
{
  char cVar1;
  char local_9;
  
  if (param_1 == 0) {
    local_9 = '\0';
  }
  else {
    local_9 = '\x01';
    while ((cVar1 = FUN_0010170a(param_1), cVar1 != '\x01' && (local_9 != '\0'))) {
      local_9 = FUN_001014cf(param_1,0);
    }
  }
  return local_9;
}
想知道小甲鱼最近在做啥?请访问 -> 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-12-24 09:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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