首页
社区
课程
招聘
[原创]Gnu Prolog 内存大小设置不当 VirtualProtect函数487错误 启动失败修复
2020-12-3 11:49 2180

[原创]Gnu Prolog 内存大小设置不当 VirtualProtect函数487错误 启动失败修复

2020-12-3 11:49
2180

版本

Gnu Prolog 1.4.5
(compiled under x86_64 / Windows 7 with MSVC++)

起因

由于Gnu Prolog Setting中默认的最大内存大小才32kb,实在不够看,所以lz在Setting里面将它调大了一些。
重启软件就闪出命令行窗口,不能打开GUI。

分析

PwSh中执行gprolog.exe,看到以下报错:

1
2
3
PS E:\Applications\GNU-Prolog\bin> .\gprolog
 
Fatal Error: VirtualProtect failed : 487

应该是lz设置内存大小不当,导致内存页保护的函数Error了。
试着重装让其恢复默认,但是遗憾的是卸载的并不干净,程序的配置依然没有删除,重新安装后依然默认读取以前的配置,程序还是进不去……
卸载时lz注意到程序目录里面的文件是删除的很干净了,而重装回来的程序依然能读取到配置,故猜想程序的配置是保存在注册表中的。
所以思路就是删掉配置,让gprolog恢复默认,嗯,就酱。

逆向

扔进ida64,看导入表:导入表-若干注册表函数
发现确实有注册表读写操作,查看函数的Xref交叉引用,定位到sub_48FDF0。
注册表读取
可以看出是进入HK\Software\GnuProlog中读取键值,但是这个HK具体是啥我不知道(对应图中hKey参数,是一个常量),索性百度一下RegOpenKeyEx。
RegOpenKeyEx函数原型、参数
ok,这回知道常量名字是啥了,拿出masm32的window.inc打开,搜索常量名字。
常量对应的值
这回终于知道读取的是哪个主键了,HKCU。

解决

注册表找到HKCU\Software\GnuProlog,发现果然储存着配置,直接整个注册表项干掉。
重新打开gprolog.exe,它终于正!常!启!动!了!泪目!

反思

完成后lz突然想到,这玩意是Gnu的软件啊!也就是说他是开源的,那我逆向岂不是逆了个寂寞……
所以lz试了一下仅凭源代码能不能找到配置在注册表的位置。
翻了一下官网,源代码在SourceForge托管,上去逛了一圈,没找到仓库内搜索。
索性跑去github上建了个空仓库,从SourceForge Import了一份源代码。
import成功
ok现在借用一下github的仓库内搜索功能,直接搜Register(翻译过来是注册表项),果然找到了:
github搜索
看来是绕了个大圈子,有源码我不看,偏偏要逆向,闹笑话了,哈哈。


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2020-12-3 11:51 被老刘NoOne编辑 ,原因: 图挂了修一下
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回