首页
论坛
课程
招聘
[旧帖] [原创]修改易语言的krnln.fne,获取正确的当前目录. 0.00雪花
2011-2-19 02:37 3320

[旧帖] [原创]修改易语言的krnln.fne,获取正确的当前目录. 0.00雪花

2011-2-19 02:37
3320
写点东西,顺便申请邀请码,等得实在受不了了。每天都只涨一点,有时受不了下载点东西就没了。有些区还进不去。

易语言的krnln.fne总是喜欢自作主张,把当前目录设置为exe程序所在的目录.
到易语言官方论坛上提也没人管.

以前用Depends.exe查看编译后的exe,发现导入表里找不到你插入的API,
觉得可能是用LoadLibrary载入,再用GetProcAddress取函数地址,最后在调用的.
今天比较无聊,就想看看到底是不是这样.
所以刚刚用易语言写了个程序试试,就是程序开始调用MessageBoxA,然后就返回而已.
就用OD载入看,程序进入krnln.fne里偶然看到调用SetCurrentDirectoryA,
我就想起以前的问题:这该死的易语言总是取不到当前目录,怎么都是EXE所在目录.
我就想自己修改它,让程序开始时不自动修改当前目录.

100602CD    FF15 10A40D10   call    dword ptr [<&KERNEL32.GetModuleF>; kernel32.GetModuleFileNameA
100602D3    8D85 ECFDFFFF   lea     eax, dword ptr [ebp-214]
100602D9    6A 5C           push    5C
100602DB    50              push    eax
100602DC    E8 7CC40400     call    100AC75D
100602E1    8BF8            mov     edi, eax
100602E3    83C4 08         add     esp, 8
100602E6    85FF            test    edi, edi
100602E8    74 19           je      short 10060303
100602EA    8D95 ECFDFFFF   lea     edx, dword ptr [ebp-214]
100602F0    8D8E EC000000   lea     ecx, dword ptr [esi+EC]
100602F6    52              push    edx
100602F7    C607 00         mov     byte ptr [edi], 0
100602FA    E8 1B130600     call    100C161A
100602FF    47              inc     edi
10060300    57              push    edi
10060301    EB 12           jmp     short 10060315
10060303    8D8E EC000000   lea     ecx, dword ptr [esi+EC]
10060309    E8 5A110600     call    100C1468
1006030E    8D85 ECFDFFFF   lea     eax, dword ptr [ebp-214]
10060314    50              push    eax
10060315    8D8E F0000000   lea     ecx, dword ptr [esi+F0]
1006031B    E8 FA120600     call    100C161A
10060320    837B 2C 02      cmp     dword ptr [ebx+2C], 2
10060324    74 0F           je      short 10060335
10060326    8B86 EC000000   mov     eax, dword ptr [esi+EC]
1006032C    50              push    eax
1006032D    FF15 98A30D10   call    dword ptr [<&KERNEL32.SetCurrent>; kernel32.SetCurrentDirectoryA
10060333    EB 4C           jmp     short 10060381


用GetModuleFileNameA取exe所在文件名的的.再去掉exe文件名获得exe所在目录,再用SetCurrentDirectoryA修改的,
我再重新运行,发现从开始直到我在易语言写的代码都只有这个地方调用SetCurrentDirectoryA的.所以肯定是这里修改了当前

目录的.
我不清楚SetCurrentDirectoryA的参数是什么,到百度百科上看看
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String)

As Long
一个参数,所以上面的push eax 就肯定是他的参数了.那就一起改吧.仔细数数"50FF1598A30D10"一共14个,nop是90,就是7个90


但是OD里怎么修改文件,我不知道.我根本不会用OD.
所以我就记下地址,用C32ASM改.用反汇编模式打开跳到1006032C.然后打开对应的HEX编辑,50FF1598A30D10改成90909090909090


保存就ok了.
最后写个程序.用 取当前目录 (),
把他放到环境变量path的目录下面,我直接放到C:\WINDOWS\
之后就在cmd里运行他,返回的就是当前目录了.

然后我们开始测试下.
易语言代码:

为什么用图片?,因为复制成文本的看起来比较怪,而且看起来也不方便.
在压缩包里有源代码.

编译后复制到C:\WINDOWS\test.exe
没有修改krnln.fne之前的.

看看,当前目录明明是"D:\EL\该死的当前目录",但易语言他就是要自动改成exe所在目录.

然后把krnln.fne替换成我们修改之后的文件再测试看看.


看到没有,取当前目录() 的结果是真正的当前目录了.不再是exe所在的目录.

还有就是,我这krnln.fne的版本是5.0.64.0,不同的版本要修改的地方不同。要自己找了。
简单的方法就是用c32asm打开,查看->输入表,kernel32.dll,SetCurrentDirectoryA,
这个krnln.fne里只调用了3次,我这个第一次调用的地方就是,双击他就自动跳转到了.
把call **和之前的一个push修改掉就可以了.
只要修改第一个就可以了,因为有些是其他地方要用的.
其他版本的也可能不是第一个,那就只修改一个,然后测试看有没有正确,如果不正确修改另一个.一个个试,总有一个是.注意备份.

忘记说了,krnln.fnr也可以用这个方法修改.

我已经把所有文件打包了,c32asm,OD在看雪这里就有下载了.
文件列表:
说明.txt   //现在正在写的这份东西.
exe源码.e  //易语言的测试源码
exe.exe    //测试源码编译后
修改krnln.fne  //已经修改的krnln.fne
原来krnln.fne  //没有修改的krnln.fne
打开cmd.bat  //运行cmd
复制到系统目录.bat  //复制exe.exe到C:\WINDOWS\test.exe
删除系统目录的程序.bat //删除 C:\WINDOWS\test.exe
file.txt   // 测试用的文件

然后最后一件事就是,我想要邀请码......
谢谢.

由于上传文件大小限制,所以把原来的krnln.fne分开一个压缩包.

可能是由于看雪这里几乎没有用易语言的,所以才这么少人看吧.
无论怎么样,感谢各位的支持.

[招生]科锐逆向工程师培训46期预科班将于 2023年02月09日 正式开班

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 168
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
龙组 活跃值 1 2011-2-20 01:01
2
0
难道连灌水的都没有吗
雪    币: 158
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smnk 活跃值 2011-2-20 01:15
3
0
搂猪真可怜,帮顶的来了!
雪    币: 1114
活跃值: 活跃值 (151)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
ycmint 活跃值 5 2011-2-23 20:55
4
0
我也来帮忙顶。。
雪    币: 386
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttgood 活跃值 2011-2-23 22:48
5
0
好。。。。。。。
雪    币: 238
活跃值: 活跃值 (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hymm2003 活跃值 2011-2-23 22:59
6
0
帮顶一下,让我有了其它的灵感
雪    币: 55
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
软着陆 活跃值 2011-2-24 00:51
7
0
多发表这类好作品

收藏学习
雪    币: 34
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
程松 活跃值 2011-2-24 11:15
8
0
小白路过帮顶
雪    币: 4462
活跃值: 活跃值 (651)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
b23526 活跃值 2011-2-24 11:25
9
0
不错偶看应该给个码
雪    币: 3443
活跃值: 活跃值 (180)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hoyer 活跃值 2011-2-24 11:30
10
0
易语言的东西看不懂!
雪    币: 452
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sniss 活跃值 2011-2-24 11:56
11
0
只好帮楼主顶了
雪    币: 311
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
雨耕山 活跃值 1 2011-3-7 14:07
12
0
同情中.......
才有一个下载的,我也下载一下,纯同情
雪    币: 17
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
啊梦 活跃值 2011-3-10 17:50
13
0
楼猪真牛啊,这也能改
雪    币: 5617
活跃值: 活跃值 (1204)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Kisesy 活跃值 2011-3-14 14:30
14
0
楼主厉害
雪    币: 30
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sTart天空 活跃值 2011-3-14 15:01
15
0
支持一下。感谢分享
游客
登录 | 注册 方可回帖
返回