首页
社区
课程
招聘
[原创]DynC动态分析C语言编译器(2007-05-16更新)
发表于: 2007-3-3 23:25 17519

[原创]DynC动态分析C语言编译器(2007-05-16更新)

2007-3-3 23:25
17519
----------------------------------------------------------------------------------------------
2007-05-16
修复动态编译器存在缓冲区溢出的问题,该问题会引发调试目标程序在一定条件下会出错
完善hex、print输出函数

----------------------------------------------------------------------------------------------
2007-03-03
春节期间写了一个可以针对正在运行程序内部写C代码,并且可以一边修改代码一边调试的工具,目前内部的C动态编译器基本稳定,但是工具的功能还很少,放出来给大伙试用。

使用说明
程序被设计可以远程调试的模式,所有分服务端和控制端
DynS是被调试端服务程序,在被调试机器运行即可
DynC是控制程序,简单的使用步骤如下:
1:   lk 目标IP ,打入LK 默认连接本机
2:   ls          列出所有正在运行的程序
3:   at 目标PID  指定需要调试的进程
到这个步骤就可以在源代码编辑区针对性的修改代码进行调试了,在代码中可以引入输入函数,将有用的信息反馈给控制端
4:   run        在目标程序中执行写好的C代码
5:   继续修改代码,再次run 或者stop 停止运行

下面是一段DEMO代码,可以载入IE浏览器进行测试

//以下是内嵌的动态库加载的函数申明
int        GetModuleHandle(char *lpModuleName);
int        LoadLibrary(char *lpFileName);
void       *GetProcAddress(int hModule,char *lpProcName);
int        FreeLibrary(int hModule);

//以下是内嵌的代码替换的函数申明
int        HookAPI(char *pDllName,char *pFuncName,void *usefunc);
int        HookFunc(void *sysfunc,void *usefunc);
void       EnableHook(int handle);
void       DisableHook(int handle);
void       UnHook(int handle);

//以下是内嵌的显示函数申明
void       print(char *lpFmt,...);
void       hex(char *lpData,int nDataSize);
void       dump();

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

typedef int (WINAPI *PRECV)(int,char*,int,int);
typedef int (WINAPI *PSEND)(int,char*,int,int);

PSEND psend,precv;
int   hsend,hrecv;
               
int WINAPI my_send(int s, char *buf, int len, int flags)
{
        int r;
        DisableHook(hsend);
        r = psend(s,buf,len,flags);
        EnableHook(hsend);
        if ( r > 0 ){
                print("\n-------------------- SEND %d bytes --------------------\n",r);
                //print("%s\n",buf);
                hex(buf,r);
        }
        return r;
}

int WINAPI my_recv(int s, char *buf, int len, int flags)
{
    int r;
        DisableHook(hrecv);
        r = precv(s,buf,len,flags);
        EnableHook(hrecv);
        if ( r > 0 ){
                print("\n-------------------- RECV %d bytes --------------------\n",r);
                //print("%s\n",buf);
                hex(buf,r);
        }
        return r;
}

//代码初始化函数,加载时运行
void InitInstance(void)
{
    psend = (PSEND)GetProcAddress(GetModuleHandle("ws2_32.dll"),"send");
    hsend = HookAPI("ws2_32.dll","send",(void*)my_send);

    precv = (PSEND)GetProcAddress(GetModuleHandle("ws2_32.dll"),"recv");
    hrecv = HookAPI("ws2_32.dll","recv",(void*)my_recv);
        print("开始\n");
}

//代码注销函数,退出时运行
void ExitInstance(void)
{
          UnHook(hsend);
          UnHook(hrecv);
          print("结束\n");
}

//附件已经更新

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (55)
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
Thanks.
2007-3-3 23:50
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
这个要顶..感觉应该比较有用.
2007-3-3 23:55
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
支持V老大
我转贴至UnPacKcN,请V老大批准
2007-3-4 01:07
0
雪    币: 116
活跃值: (220)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
5
支持V老大   
我转贴至DebugMan,请V老大批准
2007-3-4 11:20
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
置顶贴总是忘记看,转一圈回来才看到
2007-3-4 12:09
0
雪    币: 260
活跃值: (162)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
大伙随便转贴,工具本身太多bug
支持 U和D命令字 反汇编数据
2007-3-4 12:54
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
8
我靠,这个NB。
2007-3-4 13:09
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
9
这个东西比较牛,不太会用
2007-3-4 15:55
0
雪    币: 538
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
太牛的工具一般偶是用来收藏的
2007-3-4 17:23
0
雪    币: 67
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
自己总写些插件来完成这个功能 每次都要反复编译
感谢楼主写出如此有用得工具 并希望楼主能继续完善
2007-3-4 17:30
0
雪    币: 8901
活跃值: (4213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这个东东真好,要开源就太好了!!!!!
2007-3-5 00:15
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
13
非常有意思的工具,对注入调试有莫大的帮助
希望功能可以继续完善下去~
一点小发现
cls      清屏
h/help   帮助

2007-3-5 00:32
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
14
支持V老大   
我转贴至PEDIY,请V老大批准
2007-3-5 08:44
0
雪    币: 217
活跃值: (15)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
  
支持啊
如果完善到完美程度
估计会有可怕的事情发生:)
2007-3-5 09:22
0
雪    币: 255
活跃值: (266)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
16
咋觉得这个木马怎么这么牛逼呢?
2007-3-5 12:02
0
雪    币: 201
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
oil
17
NB
DEMO代码没有测试成功,少_main?
正确方法是。。。
2007-3-5 15:58
0
雪    币: 260
活跃值: (162)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
_main入口已经被封装进预设的代码中了,不需要再次定义入口,建议你通过save命令保存一下源代码,再用CC命令预编译试试看看能否编译成功
如果还有问题,可能是程序本身的bug
2007-3-5 18:49
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
19
最初由 Saver 发布
太牛的工具一般偶是用来收藏的


我也有这种感觉,先收藏,慢慢学着再用
2007-3-6 11:00
0
雪    币: 201
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
oil
20
最初由 vcasm 发布
_main入口已经被封装进预设的代码中了,不需要再次定义入口,建议你通过save命令保存一下源代码,再用CC命令预编译试试看看能否编译成功
如果还有问题,可能是程序本身的bug

搞定了,呵呵
save
?/h/help
btw:stop命令后,ls无效?
2007-3-6 13:30
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
21

那段demo代码,我这里也是在run时说_main没定义
save了也是这样
请问怎么弄?


已解决,原来丢了这个步骤:
3:   at 目标PID  指定需要调试的进程
2007-3-6 17:18
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
22
支持兄弟,我收藏之
2007-3-7 09:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持V老大
2007-3-7 12:55
0
雪    币: 238
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
真的很不错,学习之。。。。。。
2007-3-7 21:01
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
怀念vcasm的加密软件
2007-3-8 19:41
0
游客
登录 | 注册 方可回帖
返回
//