zhangjinxuan 发表于 2022-11-13 11:06:17

请问一下E2C如何使用

本帖最后由 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 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

zhangjinxuan 发表于 2022-11-13 11:36:05

人造人 发表于 2022-11-13 11:28
https://xiazai.zol.com.cn/detail/50/494618.shtml

不是,具体命令怎么用

jackz007 发表于 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-Cfile 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\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 语言编译出来的代码有关?
      会不会让你失望呢?

人造人 发表于 2022-11-13 14:26:43

你一定会失望的
一个简单的hello world程序,反编译出来的代码2000多行,怎么样?
失望吧?













jackz007 发表于 2022-11-13 15:14:07

人造人 发表于 2022-11-13 14:26
你一定会失望的
一个简单的hello world程序,反编译出来的代码2000多行,怎么样?
失望吧?


      最让人崩溃的是,里面居然找不到 printf() 的函数调用和 “hello, world!\n” 的字符串,完全看不出这玩意和你的源程序到底有什么关系。

jhq999 发表于 2022-11-13 15:42:52

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

{:5_109:}

人造人 发表于 2022-11-13 16:11:23

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

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



jackz007 发表于 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 的代码剥离掉。

人造人 发表于 2022-11-13 17:35:14

我发现了另外一个工具 ghidra
感觉还可以











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 = param_4;
            __ptr = *local_18;
            *local_18 = (long *)__ptr;
            param_1 = (long *)((long)param_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;
}

人造人 发表于 2022-11-13 17:42:24

一路 if-else 到底
一点也不智能,^_^

zhangjinxuan 发表于 2022-11-13 18:03:57

人造人 发表于 2022-11-13 17:42
一路 if-else 到底
一点也不智能,^_^

我先研究下

liuhongrun2022 发表于 2023-7-19 15:12:34

人造人 发表于 2022-11-13 17:35
我发现了另外一个工具 ghidra
感觉还可以

哇,好看!
这是什么系统?

人造人 发表于 2023-7-19 22:29:46

liuhongrun2022 发表于 2023-7-19 15:12
哇,好看!
这是什么系统?

archlinux + i3-wm
页: [1]
查看完整版本: 请问一下E2C如何使用