如何向exe程序插入代码,修改PE,实现pediy

如何向exe程序插入代码,修改PE,实现pediy,第1张

一个VB开发的exe程序(编译模式为Native Code,程序详见附件)有bug:

1、原程序采用MSFLXGRD表格控件,表格名称为Grid1,Grid1原始属性中设置行数为:Grid1.Rows = 201,设置列数为:Grid1.Cols = 21,而且在程序运行代码中没有根据数据量动态增加行数的功能,导致总行数超出201时运行错误;

2、当下一次导入数据需要的行数大于前一次的行数时运行错误。

bug测试步骤:

(1)程序界面右侧表格中右键,选择“导入模板”——选择“擂台模板一_197行.txt”,会正常导入所有数据。

(2)程序界面右侧表格中右键,选择“导入模板”——选择“擂台模板二_201行.txt”,导入数据错误。

我的解决思路:动态增加行数比较麻烦,干脆直接在“导入模板”功能中一开始就插入代码,设置行数和列数为最大,以满足需求,MSFLXGRD表格控件的最大方格量为350000个,所以设置Grid1.Cols = 110,Grid1.Rows = 3000。

需添加的代码内容(编译模式为Native Code,需要加入如下VB代码修复):

Grid1.Cols = 110

Grid1.Rows = 3000

方法:搜索论坛,大概知道了pediy的作法,在PE空节处写入需要加入的16进制机器码,然后在需要修改的地方jmp过去,再jmp回来。

你说的这个,我记得可以用java的反射来实现,网上复制粘贴一个例子

import java.io.FileInputStream

import java.io.FileNotFoundException

import java.io.IOException

import java.lang.reflect.Field

import java.lang.reflect.InvocationTargetException

import java.lang.reflect.Method

import java.util.Properties

public class Test {

系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run。

CFileDialog

savePath(true,NULL,NULL,OFN_HIDEREADONLY,"exe

Files(*.exe)|*.exe||",NULL)

if(savePath.DoModal()==IDOK)

{

CString

fullName

fullName=savePath.GetPathName()

RegKey=NULL

RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&RegKey)

RegSetValueEx(RegKey,"my_program",0,REG_SZ,(const

unsigned

char

*)(LPCTSTR)fullName,fullName.GetLength())

AfxMessageBox("写注册表成功")

UpdateData(FALSE)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11623079.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存