首页
社区
课程
招聘
[原创]windbg 脚本化扩展 xcwd
发表于: 2015-6-20 20:52 13365

[原创]windbg 脚本化扩展 xcwd

2015-6-20 20:52
13365
终于搞完了,还写了一个基本的API文档.。
被 windbg 自带的脚本恶心到的,可以试试我的 xcwd .
这里是函数文档  http://tinysec.net/article/xcwdapi.html

格式有点乱。

概述

function ShowProcessImageName(nPid)
{
    var vRet = GetProcessImageName(nPid);
    if ( false != vRet )
    {
        printf("Pid:%d -> ImageName: %s\n" , nPid , vRet);
    }
}

Script d:\xcwd\test.xc

// argv[0] is script file path
function main(argv)
{
    print("windbg is cool!\n");
    return 0; //reserved
}

Usage

.load xcwd

!xc d:\xcwd\test.xc //call main

省略语法
在调试的时候懒得打字,所以搞了这么一个省略语法。
如果添加环境变量 _XC_SCRIPT_PATH 指向 d:\xcwd; 那么xc会以这个环境变量为SearchPath自动搜索。
那么执行的时候可以用省略语法.
!xc test //一样的效果,少打字。

有限的支持unicode
支持 L 关键字 , 但是不支持中文 ,可能会乱码。



------------------------------------
fix bugs. 新版在API文档页面.

.....................................
不知道说什么好, 争论这种无聊的语言问题,还不如多解决几个实际的问题.
该不该造轮子, 用什么语言, 真的有这么重要吗?

---------------------------------------------------

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

上传的附件:
收藏
免费 3
支持
分享
最新回复 (22)
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
为什么不用现成的脚本系统,比如Python,而要自己发明轮子呢?Python等是通用脚本,看帖的人可能已经会了,就免除了学习语法的负担。就算没学,学了以后在其他领域也有用处(例如IDA有IDA Python)。Python的稳定性、完善的语言设施和庞大的三方库支持,肯定是自己实现的脚本所不能比的。

另外,Windbg的Python脚本扩展,已经有人做了:https://pykd.codeplex.com/
2015-6-21 21:42
0
雪    币: 130
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看起来很像JS.
2015-6-23 09:59
0
雪    币: 284
活跃值: (3394)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
4
从什么时候,不造轮子的人开始问造轮子的人,“为什么要自己发明轮子呢?”
又从什么时候,不造轮子的人开始议论造轮子的人?
2015-6-23 14:25
0
雪    币: 90
活跃值: (80)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
然而OD的脚本系统也是自造轮子的,od的python插件只有一个最初版本。。
2015-6-23 15:26
0
雪    币: 231
活跃值: (663)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最看不起你们这种抱着个py趾高气昂的说“不需要XXX”的人
2015-6-23 16:17
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
典型的“不是厨师就不能评价菜品”的强盗逻辑。
另外,你怎么知道我没造过轮子?造了一半发现有人造了,没这必要了。
2015-6-23 17:03
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
我只是拿Py举个例子。你看不起随你去,我说有了YYY了,所以不需要XXX,你到是说个“需要XXX”的必要性啊。
2015-6-23 17:06
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
9
最初版?那ImmunityDebugger呢?
2015-6-23 17:07
0
雪    币: 138
活跃值: (306)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
.....................................
2015-6-23 17:59
0
雪    币: 90
活跃值: (80)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
我说的是OD,不要扯其他调试器,调试器多了去了
另外你去网上找一些OD脚本你看看有python的吗
2015-6-25 13:46
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
12
ImmunityDebugger不是什么其他调试器,就是修改版OD。是那个公司买了OD的源码进行二次开发而来的。不要拿“修改版”说事,现在大家用的OD,哪个不是修改版(各种汉化、增强版)?谁还会用原版的?只不过人家有源码,修改和增加功能更直接简单而已。和原版OD相比,架构、界面、基本功能都没有改,API也兼容,所以只是OD的“修改版”,而不是“其他调试器”。
ImmunityDebugger最大的亮点就是集成了Python作为其脚本。所以没有必要再为OD造轮子了。ImmunityDebugger和OD的API接口是基本兼容的。只是函数名的前缀改了下。OD的插件,有源码的只要带上ImmunityDebugger的头文件编译一下,没有源码的修改一下导入函数之类的,就可以在ImmunityDebugger上使用。

OD的那个脚本插件历史很久了,那个时候它是唯一比较完善的脚本插件,所以网上流传下来的很多(基本是脱壳脚本之类的)都是用那个插件脚本写的。但ImmunityDebugger也不是没人用,大名鼎鼎的FireEye公司就用它来分析某些Malware,这里就是他们用到的脚本。

最后再说一句,现在通用高级脚本语言的同质化倾向比较严重,倘若某个语言确有缺陷,往往在后续的版本中会修正和补足这些缺陷,倘若和其他语言相比,缺少某个功能,后续版本往往也会补全。这就是竞争导致的同质化。这种情况下争论是Python,还是Ruby,还是Perl,还是Tcl,还是其他什么脚本更好,没有什么意义,最多是个人的喜好不同而已。各种高级语言实质上都差不多。然而,尽管普通的高级脚本语言(例如Python,Ruby,以及楼主写的XC脚本)都差不多,它们和模仿低级语言设计的脚本语言(例如OD的那个类汇编脚本)是有本质区别的。今天,除了有某些特殊目的(例如学习、特殊的优化、特殊的系统限制等)外,没有人会去首选低级语言写代码。这是因为,低级语言的可移植性差,更重要的是,和高级语言相比,低级语言表达程序的逻辑相当不方便直观。同时,低级语言程序的可读性普遍较差(否则,逆向就不难了)。所以,OD的那个脚本,明显不如ImmunityDebugger的脚本好用。只不过它历史比较久,积累了不少实用脚本,比如脱壳类的,这些脚本实现的功能一直都有需求,所以还流行着。它的流行,绝不是因为它比高级脚本还好用。只不过那个年代缺少高级脚本(ImmunityDebugger在2007年才发布第一个版本,还不好用),它成了相对最好的选择而已。

楼主的脚本显然不是低级语言,它和Python之类的高级脚本是同质化的,没有什么明显的优劣之分。所以,我并不是说楼主的实现的脚本多么差多么不好用,它其实和其他高级脚本是一样好用,因为前面说过,高级语言基本是同质化的(一些另类的,比如什么函数式编程语言不谈)。但同质化也削减了自己实现一套高级语言的价值。因为这样,自己辛辛苦苦做出来一个初版,别人早已做得很完善,而且自己做的也没有什么独到之处。这是一种时间和精力的浪费(所谓“造轮子”)。按楼主的话来说,与其说是费力做着别人早就做好的东西,“还不如多解决几个实际的问题”。
2015-6-25 23:29
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
13
既然楼主发话了,那有必要认真回复一下。

首先,xcwd是楼主倾注了心血的作品,毫无疑问是非常棒的。这一点没有什么可指责之处。我本意也并非争论语言的优劣,只是提醒楼主没有必要重复做别人做过的事,因为有以下两个事实存在:


    [*]已经有现成的好用的脚本语言了
    [*]已经有人做过脚本化windbg了(而且还是开源的)


如果一个东西别人已经做好了,而且做得不差,单纯从技术和使用角度来说,很难想象有什么非得自己再把同样的东西做一遍的必要性,除非是认定了别人的东西有比较严重的缺陷,不能满足需求,或者自己有自信比别人做得更好,或者自己有什么独到之处。但就楼主做的东西看,似乎没有看出符合上面几点之处(尤其是自己设计一套语言),因此重复做同样事(所谓“造轮子”)的理由,就很值得商榷。

所以,与其说把时间花在重制别人早已做好的东西上,还不如把时间用到自己的独到的原创作品上,是不是呢?当然,xcwd做到这种程度,要放弃确实是一件可惜的事。我想楼主多半还是要继续开发完善下去。既然这样,那我建议楼主能做出一些特色的功能来,这样,能使xcwd更有意义。最后,倘若楼主以后还有什么(比较复杂的)东西想要自己开发的,我真诚建议先看看有没有人做过,做得怎么样。确定有必要性后再自己开发。倘若别人做好的是一个开源软件,可以考虑给它添砖加瓦,贡献代码。如果开源软件已经停止开发多年,但又很认可它的价值的话,可以尝试联系作者,看能不能把项目所有权给你。没有回应的,再决定是继续在这个软件基础上开发,还是重新做一套。

倘若楼主是出于学习或者自娱自乐的目的开发xcwd的,那我前言撤回,当我没说。

我并无冒犯之意,倘若无意中多有冒犯,还请见谅。
2015-6-26 01:16
0
雪    币: 2509
活跃值: (2328)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
14
写了那么多字,为何不说说
已经有人做过脚本化windbg


到底是哪个?跟楼主的比较有哪些优点,缺点。

哪怕写写自己使用windbg其他脚本经验也行啊

我并无冒犯之意,倘若无意中多有冒犯,还请见谅。

2015-6-26 11:52
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
不好意思,2楼的回复已经说过了。所以这里就不重复了。
2015-6-26 15:46
0
雪    币: 52
活跃值: (2275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
赞一个,写的不错。
2015-6-26 23:59
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
帮你顶顶 虽然我也不懂
2015-6-28 10:05
0
雪    币: 1556
活跃值: (853)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
18
只要楼主持续开发,发觉自身的特点与长处,我想是有前途的
2015-6-30 20:13
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
能用就行,方便就行。支持楼主。
2015-7-1 13:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jmp
20
open mind,知道得越多才越心虚啊,thebutterfly建议几中肯!
2015-7-6 00:17
0
雪    币: 76
活跃值: (206)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
21
windbg 自带脚本不好用   帮顶
2015-7-10 17:30
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
现在不能下载了。
2015-7-31 11:44
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主这里已不能下载。想下来玩玩。
2015-8-2 07:31
0
游客
登录 | 注册 方可回帖
返回
//