首页
社区
课程
招聘
[分享]易语言重载内核!
发表于: 2015-5-28 08:23 18369

[分享]易语言重载内核!

2015-5-28 08:23
18369
本菜鸟今天刚转正,成为正式会员,之前发现论坛基本没有关于易语言的帖子,今天就借这个机会发个易语言重载内核的源码! 由于我刚接触游戏保护,还有很多不懂的地方,请大牛给个研究保护的步骤,   我现在会重载内核,请问下一步该从哪儿入手呢?  

好了,直接上易语言重载内核代码!  对于易语言,大神们都别喷,能达目的的语言都是好语言  领附QQ: 564673226   欢迎伙伴一起成长!

.版本 2

.子程序 重载内核, 整数型
.局部变量 hFile, 整数型
.局部变量 文件信息, 文件标准信息
.局部变量 IoStatusBlock, IO_STATUS_BLOCK
.局部变量 FileOffset, LARGE_INTEGER
.局部变量 Date, 字节集
.局部变量 pDate, 整数型
.局部变量 Dosheader, IMAGE_DOS_HEADER
.局部变量 Ntheader, IMAGE_NT_HEADERS
.局部变量 Sectionheader, IMAGE_SECTION_HEADER, , "0"
.局部变量 i, 整数型
.局部变量 VirtualSize, 整数型
.局部变量 SectionSize, 整数型
.局部变量 新内核地址, 整数型

hFile = 文件_打开 (“C:\Windows\system32\ntkrnlpa.exe”, #读写, #无限制)
.如果真 (hFile = 0)
    DbgPrint (“打开文件失败”)
    ZwClose (hFile)
    返回 (0)

.如果真结束
文件信息 = 文件_取信息 (hFile)
FileOffset.LowPart = 0
文件_读取数据 (hFile, Date, , FileOffset)
pDate = 取变量地址_字节集型_ (Date)
.如果真 (读内存字节_ (pDate, 0) ≠ 77)
    DbgPrint (“错误->读内存字节_ (pDate, 0) ≠ 77”)
    ZwClose (hFile)
    返回 (0)
.如果真结束
' RtlMoveMemory_IMAGE_DOS_HEADER_1 (Dosheader, pDate, 64)
memcpy_Dos (Dosheader, pDate, 64)
.如果真 (Dosheader.e_magic ≠ 23117)
    DbgPrint (“错误->Dosheader.e_magic ≠ 23117”)
    ZwClose (hFile)
    返回 (0)
.如果真结束
memcpy_Nt (Ntheader, pDate + Dosheader.e_lfanew, 248)
.如果真 (Ntheader.Signature ≠ 17744)
    DbgPrint (“Ntheader.Signature ≠ 17744”)
    ZwClose (hFile)
    返回 (0)
.如果真结束
重定义数组 (Sectionheader, 假, Ntheader.FileHeader.NumberOfSections)
.变量循环首 (0, Ntheader.FileHeader.NumberOfSections - 1, 1, i)
    memcpy_cection (Sectionheader [i + 1], pDate + Dosheader.e_lfanew + 248 + i × 40, 40)
    VirtualSize = 位与 (Sectionheader [i + 1].Misc, 65535)
    SectionSize = GetAlignedSize (Sectionheader [i + 1].VirtualAddress + 选择 (Sectionheader [i + 1].SizeOfRawData > VirtualSize, Sectionheader [i + 1].SizeOfRawData, VirtualSize), Ntheader.OptionalHeader.SectionAlignment)
    Ntheader.OptionalHeader.SizeOfImage = 选择 (SectionSize > Ntheader.OptionalHeader.SizeOfImage, SectionSize, Ntheader.OptionalHeader.SizeOfImage)
.变量循环尾 ()

' 新内核地址 = 申请_内存 (Ntheader.OptionalHeader.SizeOfImage)

新内核地址 = ExAllocatePool (0, Ntheader.OptionalHeader.SizeOfImage)

.如果真 (新内核地址 = 0)
    DbgPrint (“错误->申请内存失败”)
    ZwClose (hFile)
    ExFreePool (新内核地址)
    返回 (0)
.如果真结束
memcpy (新内核地址, pDate, Dosheader.e_lfanew + 248 + Ntheader.FileHeader.NumberOfSections × 40)
.计次循环首 (Ntheader.FileHeader.NumberOfSections, i)
    memcpy (新内核地址 + Sectionheader [i].VirtualAddress, pDate + Sectionheader [i].PointerToRawData, Sectionheader [i].SizeOfRawData)
.计次循环尾 ()
基址重定位 (新内核地址)
ZwClose (hFile)
DbgPrintInt (“新内核地址=%X”, 新内核地址)
NewImage = 新内核地址
SSDT重定位 (NewImage)
返回 (新内核地址)

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

收藏
免费 0
支持
分享
最新回复 (35)
雪    币: 157
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不知道用起来简单不?感觉没有C++的基础,很难读懂这段代码
2015-5-28 08:34
0
雪    币: 1525
活跃值: (3422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
把代码复制到易语言界面就清楚了,这上面确实不好看,
2015-5-28 08:56
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
居然完全看不懂。
2015-5-28 09:35
0
雪    币: 11155
活跃值: (3110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
麻烦LZ把自定义数据类型, DLL声明都贴一下吧。
上源代码更好
2015-5-28 09:35
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
咋还有
    DbgPrint (“错误->申请内存失败”)
    ZwClose (hFile)
    ExFreePool (新内核地址)
    memcpy (新内核地址, pDate, Dosheader.e_lfanew + 248 + numberOfSections × 40)
这些英文函数呢?
要是是下面这样的话就好了。
    输出调试信息(“错误->申请内存失败”)
    关闭句柄 (hFile)
    释放内存池(新内核地址)
    复制内存(新内核地址, pDate, Dosheader.e_lfanew + 248 + numberOfSections × 40)
如果是这样,我想没学过编程的,也能看懂个大概。
2015-5-28 09:41
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
还在比较容易理解的
2015-5-28 09:51
0
雪    币: 256
活跃值: (48)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
这叫源码...笑了 基址重定位 和修复SSDT的函数是关键好吗  你怎么得到KiFastCallEntry函数地址? 硬编码?
不是喷易语言 你这只是把某段代码用易语言翻译了一遍吧.
2015-5-28 09:58
0
雪    币: 158
活跃值: (263)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
9
看着满满的WIN API,我也是醉。你的 memcpy ,应该改用 内存复制, 用中文比较好,一堆英文,谁看得懂呀。
2015-5-28 11:01
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
好吧哥还是忍不住笑了
2015-5-28 11:25
0
雪    币: 41
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
在易语言上面真是瞎费功夫
2015-5-28 13:34
0
雪    币: 22
活跃值: (242)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
12
我要笑喷了
2015-5-28 13:37
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
呵呵,想不笑喷都难哪!
不说易语言调用Win32 API,相关函数和关键变量重定位也没有...
况且只在Ring3层折腾能做到想要的操作吗?
2015-5-28 15:54
0
雪    币: 158
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看着看着就醉了
2015-5-28 16:13
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主辛苦了,,
2015-5-28 16:29
0
雪    币: 1626
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感觉看着好乱...
2015-5-28 16:49
0
雪    币: 1525
活跃值: (3422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
哎,发这个果然是挨喷啊,既然有人说这是r3的,那我就干脆好人做到底,明早下班回来直接传源码,包括hook  kifastcallentry  基址重定位  ssdt重定位的   需要的顶下,大家就别喷易语言了  比c的就是编译文件大点   其他感觉挺方便的……
2015-5-28 16:59
0
雪    币: 1525
活跃值: (3422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
你看下哪里有win32?兄弟没玩过易语言吧??
2015-5-28 17:18
0
雪    币: 277
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼主真是NB哄哄啊!
2015-5-28 17:50
0
雪    币: 60
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
啥也不说期待源码。能用就行不分语言
2015-5-28 23:03
0
雪    币: 6911
活跃值: (9069)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
21
还不如c看着舒服
2015-5-28 23:41
0
雪    币: 2543
活跃值: (2139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
新人表示不会,看不懂
2015-5-29 01:57
0
雪    币: 56
活跃值: (648)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
就这代码怎么看出来不是R3?要是靠一堆所谓的模块,来完成R0操作。这代码有什么价值?这叫懂了?R0地下C都嫌麻烦,很多地方直接就汇编了,用这个封装再封装,还不知道里面封了啥的东西?对蓝屏就那么有爱?

如果还是驱动+api,那为什么不用更高效灵活底层的C实现?

PS:十分想知道出了问题楼主怎么调试,还是说楼主天赋异禀代码根本不用调试。
2015-5-29 03:55
0
雪    币: 56
活跃值: (648)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
你觉得涉及到r0的操作,不直接用api,用这些封装的私有函数很高明?别这样求求你了。
2015-5-29 03:58
0
雪    币: 1525
活跃值: (3422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
我只能感叹句,易语言真不容易啊,内核函数换了个名字而已就没人认识了变成封装了,其实除了不支持指针,自定义数据类型要自己计算大小,编译出来后多了个外壳程序,其他真跟c没啥区别啊……至于调试么,直接代码中间   置入代码(204),这命令就可以了,然后windbg跟起走……
2015-5-29 07:00
0
游客
登录 | 注册 方可回帖
返回
//