00:00
今天呢,我们讲的是什么东西呢?咱们今天那个,呃,你说360驱动更前面加载,你后面加载驱动必然被自裁炸,这个东西你其实就是谁先下手的问题,如果说你可以下手的比它更底层的话,你就赢了嘛,而且360并不是最先加载的啊,所以说呢,这个东西呢,相对而言啊,相对而言你只要比他晚,你确实干不过的,但你只要比他早,那就肯定干得过的啊,这其实就是谁谁更底层的一个问题,你就比如说它如果是一个过滤驱动,你S封装就是比那个mini fire更底,那这个东西是没有码的,对不对?好,然后今天咱们讲的呢,是一个注入啊,什么是注入呢?这个要讲注入呢,咱们先要了解一个东西,叫做这个模块啊,也就是动态链接库,然后呢,我先用一个工具啊,我用一个工具给大家看一下啊,什么是动态链接库,首先我点这里啊,然后我们看一下我启动的这个程序啊,也就是进程。
01:00
啊,它这里边儿啊,你可以看到这个东西是什么呢?这个东西就是它的这个主模块啊,也就是这个price.ese啊这个东西。然后呢,底下这边呢,是什么东西呢?你可以看到其他东西呢,都是一个以DL结尾呃为结尾的一些文件啊,然后呢,你可以看到啊,前面有几个是这个NT dr.DR啊,这个K,这个K32.dr,比如k base.dr啊,这个U32啊这种啊这种东西,那这种东西是什么呢?它就是所谓的动态连接库,那我们在我们Windows操作系统上的程序啊,这个包括我们的e SE ss啊,就是刚才说的驱动啊,其实都属于什么,都属于P文件啊,其实它本质上而言呢,没有什么实际的区别,然后它的格式呢,都可以同使用同一种结构进行解析,但是呢,它们的功能性呢,还有是有一定区别的啊,你像是SYS驱动呢,它本身的相当于呃,操作系统的组件啊,或者说内核的组件啊,然后呢,你像是这个ESE呢,它就是可以直接跑起来的一些程序,你像说我们日常中见到的这个QQ啊,PC版的微信啊,我们写代码用的studio啊,调试用的windbug叉64BUG啊,这种东西呢,都属于什么呢是。
02:10
属于啊可程序的一种,然后呢,我们这里边呢,还有什么东西呢,还有一些动态链接库。那动态链接库的功能是什么呢?动态链接库分为两种啊,一种呢是你自己的,一种呢是第三方的,这个第三方呢,也包括操作系统的,比如说我们在这个我们的汇编编程实也用很这系统的,比如说这个E个数,那这个函数本质上呢,它不是我们写的一个函数,那它来自于哪里呢?你可以看到提示它来自于三二点INC,那这个意思就是什么呢?K32.inc,它封装的是kno32.b里的一些东西啊,如果换成换算成我们动态连接这方面呢,就是三二点DR,那这个是什么意思呢?也就是说这个e process实际上是操作系统啊,给你封装的函数啊,他写的函数,然后给你用啊,那么这个函数写在哪了呢?它就写在了一个个的D里啊,就是不同的D实现了一些的不同的功能,比如说有的是这个与这个G相关的,有的是与系统功能相关的,有的是与文件相关。
03:17
真的有的是与串口相关的啊,分装封装成不同不不同的这个拈啊,然后呢,我们现在呢,就用这个什么呢,用大家的这些接口就可以调用操作系统使用的一些功能,那如果你完全没有这个使用它这些东西的情况下呢,你的操作系统也必然会给你加载几个常规的这个动态连接库,比如NT dr.DR这个呢,无论你基本上就是你用不用它的API,它也会给你加载进来,那有一些API呢,就是什么呢?就是你不用的时候,它就不会加载啊,比如说一些这个第三方的啊,或者说系统一些比些比较偏门的啊,比如说你如果不用这个DX进行绘制,它就肯定不会加加载这个DX相关的一些这个动态链接库啊,就是这么一个功能。
04:00
那动态链接库这个东西呢,除了这个超级系统这个这提供这些呢,我们自己也可以写,然后呢,第三方也可以给你提供,比如说有时候呢,你可能啊,想提供给别人一些功能,但你又不想让他看见源码,你就可以给他这个做成这个库的形式,然后给他一个投文件,它就能调用了,然后呢,我们今天呢,主要的这个点呢,不是说要带大家去这个看这个动态连接库啊,他呢只是我们实现工程的一个过程啊,但是因为我们这节课还没讲到这个如何用汇编啊去写这个动态链接库,所以说先给大家简单封装一下。啊,我录了是吧?我操,吓我一跳,我以为我没录呢,那可真是亮。好,那么我们现在啊,给他新建啊文件新建项目啊,我这是2017啊,其他版本应该也类似2019呢,它在这块可以选啊,这这个位置上也可以选啊,也类似啊,我选一个Windows桌面,然后选择一个动态线库啊,这个呢,它就是封装好的啊,如果你想要啥也没有的呢,你就创建一个空项目啊。
05:03
比如说我这有一个第二二十三啊,我直接点确定。然后呢,它这有一个进度啊,创建出来之后呢,就是这个状态啊,这个pch呢,它是一个预变镜头,如果你不想要呢,你可以在属性里直接把它关掉啊,在这个我们的这个属性下加,然后是一边一头,这里你直接把它给关掉就可以,我这就直接放在这啊,其实可有可无的一个东西,然后呢,我们给它设置一下啊,把这个MD啊改成MTD啊这个多能调试模式,然后呢,把这个环关掉啊,我没装啊,然后应用啊确定啊,这里呢,你需要注意你的这个调试和这个平台呢,需要和你当前使用的相同啊,这个WIN32就是叉八六,然后第八个版本没有问题啊,点击确定,接下来呢,我们可以看到啊,这里边呢,给你先已经这个显示出一些东西来了啊,首先是这些模块句柄之类的东西啊,这个是自己的模块句柄啊,这个东西就无所谓了啊,我们主要现在来看一下这个东西啊,这个东西呢,就是什么呢?是你这个动态链接库被加载的时候的一些情况啊,动态链接库这个东西呢,实际上是有几种情况呢?你像刚才我们说的那些情况呢,就是由。
06:11
跳度系统为你进行加载啊,就是比如说有强制加载的和这个自动加载的,强制加载呢,就是你一定要加载的,比如NT dr.DR啊,自动加载的呢,就是你如调用它的某一些ipi,它就会帮你把这个东西加载进来,那么还有什么呢?还有的就是这个我们自己写的动态接库,或者其他人写的些动态链辑库,我们想用的时候,我们可以干嘛呢?有两种方式去调用它,一种呢,就是直接去包含它的这个lab库,还有是什么呢?要附加依赖项这种还有一种呢,就是显示的加载,它直接跳调用一个API,这个API呢叫load library啊,有这个两个版本,这个A版和W版的load library a library w啊,然后可以进行一个啊这个动态库的一个加载,那我们现在呢,是要干嘛呢?我们是一种其他的情况,就是我们不在我们自己的进程里加载动态接库,而是什么呢?而是想要其他的进程加载我们自己的动连接库啊,那这个原理呢,我们一会儿再说,我们今天讲的是远程线程方式,之后呢,我们还会讲其他方式啊,我们今天先讲其中一种,那我们先看看它这个几种。
07:11
情况啊,这几种情况,这几种case啊,就是告诉你啊,在某种情况下,它里边的代码会被加载啊,那首先呢,你先给它所有的这个分支都加上这个break啊,我就遇上过一些奇怪的情况啊,就是加上break一般就会减少这种情况的出现,好然后呢,我们现在呢,就来说一下,首先呢,你看第一个这个是什么呢?这个是在进程附加的时候啊,进程附加的时候啊,开始执行的代码啊,这个呢是有这个新的线程啊,附加上了,附加上新的线程的时候啊,开始这个呃,搞的这个执行的代码,那这两个顾名思义啊,就是线程和这个进程啊,进行这个退出或者说就剥离的时候啊,这个执行的代码,那我们现在呢,只需要在它这个启动的时候啊,执行一下就行了,就是在这里啊,这个进程附加上的时候,那我们现在呢,就是给它来一个弹窗。
08:03
我们直接给他谈一个这个box啊,一个弹窗。啊什么,有什么问题吗?有问题你就说啊。好,我们给它进行一个重新生成啊。
09:02
然后呢,我们在它的这个首链目录下,把它的这个可真程序拿出来啊,就是点D结尾这个东西啊,我们现在给它拿出来。随便找个地方啊,我们给它放一下啊,那接下来呢,我们就用这个工具啊,我们先给它实行一次注入啊,我们看一下。然后呢,我们现在呢,就是选择这个DR23.dr啊,我们给它选择注啊,选择之后你可以看到啊,这里呢有一个credit,现在呢,我们就已经给它注入进来了啊,你看注入功啊,你可以点一下底下啊,确认他们俩呢是同一个程序啊,同一个进程的啊啊如果说他俩在底下是不是这种情况下啊,是这种两个窗口的,这个呢,就不是同一个这个进程下的,那现在呢,可以看到他们是同一个进程下的,那我们这个东西呢,它使用的这种方式呢,就类似于远程线程注入啊,然后我们点击确定啊,它会返回一个地址,是因为什么呢?我们刚才注入的时候啊,因为它这里头没有多线程啊,所以说呢,在注入它结束返回的时候呢,它被阻塞到了啊,所以说呢,它会被卡到啊,所以说呢,你点到确定之后,在这个位置上,它会才会弹出你的imagee base啊,就是你加载在哪儿了啊,我们点击确定好,那我们这一节课呢,就来实现一下这个功能,那我们这个功能呢,它主要实现的一个原理是什么呢?我们来看一下啊。
10:37
好,首先呢,我们如果需要把一个动态链接库啊,显示的加载到自己的一个这个内存空间里啊,那这个时候呢,我们一般情况下调用的这个函数呢,叫做load library。啊,它有两个版本啊,一个叫做load library a,一个叫做什么呢?Load library啊,他们俩的版本的这个意思是什么呢?就是这个A版呢,其实是这个版本啊,然后这个W是这个啊,其实也就是多字节和这个字符,然后我们这两个函数,它的功能是什么呢?它就其实就是加载一个动态接库到我们自己的这个呃程序空间内,然后返回一个这个句柄啊我们可以现在呢来看一下MSDN对它的一个解释啊。
11:48
啊,这个呢,就是MN上做一个解释啊,然后呢,我们来看一下啊呢,有一个回值,一个参数,它这个参数呢,就是你要加载的啊动态链接库的这个名字啊这个名字,然后呢,它返回的呢,就是一个模块的句型啊,一个模模块的句柄,然后呢,我们现在呢,已经知道了,你在本进程内啊,你加载它的时候啊,就是用这个东西,那么你在这个目标进程内啊,你也可以用这个东西啊把一个动态链接库加载到目标进程里,但是有一个问题就是什么呢?你如何去目标进程里啊去执行一下这个函数啊,那这个呢,其实呢是实现了,呃是我们这里呢,有很多种方式去执行它,那我们这节课讲的呢,是通过一种叫做远程线程的方式,远程程的方式,远程程是么呢?啊,程这个概念首先我们要了解啊,就是我们一个程里边啊程际。
12:49
个结构体,它呢本身是一个惰性的结构啊,它是不需执行什么东西的,真正的这个执行执行代码的啊,跑代码的是什么呢?是线程啊,我们一个进程内有可能有一个程,有多有一个线程或多个线程啊,我们现在那个来看一下啊,我们这个详细信息里应该是有这个有这个东西的,我看一下有没有线程数这个东西啊呃,查看一下啊,我这里应该是可以按列查看选项。
13:19
啊,我忘了,我忘了这是怎么选的了,这应该是能啊,这能选择列啊,它应该是有一个线程数,我看一下。啊,这呢线程啊,点击确定哎,你看这是不是就多出了一个线程啊,你比如说有一个线程的,有15个线程的啊,有这个三,诶这是县城还是县程优先级啊啊,这不是优先级啊,有41啊,那不是优先级啊,这就是个数啊,然后你可以看到这有还有还有好几百线线这个线程的啊,比如这个这个资源管理器有400多个线程的,所以说呢,它每一个线程就相当于什么呢?就先相当于是单独的一个这个小的进程啊,小的缩型的进程,它可以去跑一些程序,但是跟进程不同啊,进程本质上它是不不好代码的,那么我们这里呢,其其实就可以了解一下这个CPU相关的一个这个知识啊,比如说你如果去买过一个硬件的情况下,你应该知道这个CPU有一个概念叫做多线程啊,比如说我们英特尔的这个CPU啊,它早期的,比如说说什么双核四线程,四核八线程,八核16线程这个这种的,那我们这个线程是什么意思呢?其实呢,就是说它进行了一个这个有一个是物理核,有一个是这个逻辑核啊,然后呢。
14:28
每一个核心的啊,都可以去跑这个代码,那我们每一个现每一个这个核心的同时只能跑一个这个现成的代码,但是呢,它会它会采用一种式的时间片的形式啊,去切换这个线啊,然后去执行啊,然后呢,我们这个就说远了,我们回到我们线程这个方面,大家知道它可以执行代码之后,那么我们这个线程呢,是可以调用一个叫做这个create process的一个API来进行创建线程的,那么我们这个时候呢,就可以了解一下啊,我们本进程可以创建线程,那我们远程进程啊,也就是说我们的这个目标进程或者说进程或其他进程是不是也可以创建线程的是可以的啊,这里呢,使用了一个API啊,叫做这个。
15:18
啊,创建远程线程啊,那这个为什么我们要指出这个东西呢?因为它里边有一个参数啊,我们来看一下啊,这里有一个参数。这里边参数是什么呢?我们要看的就是这个啊,这个你可以看到啊,这有一个这个这个什么这个three的啊,Start啊,就是这个程启动它的这个参数名叫做这个,那为什么说我们要用这个东西呢?因我们这个程啊,本上它要跑一段,那一般情况下呢,我们这个start dress上面呢,放的就是什么东西呢?放的就是一个函数啊,然后你去跑这个函数啊,它可以是一个死循环一直执行的函数,也可以是一个这个执行完就结束的一个函数啊,然后下边这个呢,下一个参数呢,这个参数呢,就是它的参数啊,那我们这里呢,回头来看一下load library a啊这个函数啊,你是不是特别眼熟啊,你看啊,它首先它是一个这个普通的一个函数,然后呢,它有一个参数啊,这个RPSTR呢,实际上就相当于一个字符串,其实就是一个内存空间,所以说呢,它的类型呢,理论上而言呢,和我们的RP word类型呢是一样的啊,也就是说呢,我们这两个东西其实是可以通用的,也就是说我们可以把load。
16:39
A,作为的啊,这个的启动函数也会,也可以叫回调函数来这个填充,然后呢,让我们的这个,让我们这个线程啊,在目标进程内启动,然后去执行load library,然后把你要加载的这个动态链接库的路径啊,当做参数传给load library就行了啊那么这个时候还有一个问题,就是你如何在目标进程内找到load library的地址啊,但是实际上而言,这个事儿非常好办,你直接在自己这边找就行,因为像是load这种地址呢,在这个你当前的系统内,它的地址是一致的啊,就是你这边它在哪啊,目标这边它还在哪啊,那好,那我们现在呢,大致上了解了它的这个加载原理啊,那我们现在呢,就来写一下代码啊,来这个实现一下它我们已经有一个动态验接库了,那我们现在呢,直接写一个这个注入函数就行了啊,我们现在来写一个这个,呃,In啊inject啊,Process啊注入进程。
17:41
然后啊PC啊,我们两个参数啊,一个D啊,这个PID啊,还有一个是我们的SZ,就是传一个这个我们进程ID,传一个动态链接库路径,然后注入进去啊好,然后呢,我们给它做一个结尾的P。
18:00
现在呢,我们先呢要做两件事啊,我们首先呢,要到library这个的地址啊,那我们这个地址呢,我们要用呢,我们要使用一个叫做这个get啊pro ROC啊address。啊,这样的一个函数啊,那它的第一个参数是什么呢?第一个参数是一个模块的一个句柄,也就是load library这个函,这个这个函数在哪一个模块里,那我们这个load在哪个里边呢?我们其实呢,可以回回去看一下,但是也可以直接来这边找啊,那实际上而言呢,是什么呢?在这个我们来回来看一下啊在这边啊,它应该是有一个啊,你看在这儿它的这个lab库是什么呢?是C32.lab啊所以说呢,我们在这边呢,就可以干嘛呢,我们直接去找这个,可三二点D啊,我们这不是要找lab啊,去去D里找啊,一会儿我们要从这个动态库里加载啊,所以说呢,我们要去找这个可2.dr的一个模块句柄,那要找它的模块句柄呢,我们要使用另一个API啊,就是load library啊,Load library我们直接用load library啊,给它加载进来,哎,不对,我们不用啊,我们现在呢,我们内部已经有了这个,呃,这个模块啊,那我们直接使用这个get model handle啊。
19:15
就可以直接获取到啊。啊,这样更为简单一点啊,Get model handle,然后呢,我们直接传一下那个模块名就行了,我们在这边呢,我们声明一个啊,Z啊,DR。A2A2可三二啊,然后DB可三二点DR2好,然后呢,我们用这个东西啊,我们现在呢就可以给他啊传个地址好传完地址之后get model托憨豆之后呢,它会把一个东西呢给你,把这个模块的一个句表呢,返回给你到你的exx里,那我们如果需要存起来的情况下呢,我们就用一个变量给它move进去,但是现在呢,我们直接在下一行要用,所以说呢,我们直接用e as做它的参数就行了。第二个呢,就是你要找到函数啊,那我们这要找到函数就是load library嘛,我们这呢,再给他来一个library的一个函数名load的。
20:18
A library Li。Bra,为了防止我写错,我来这边给它复制一下啊,我们用library。啊,这个官方文档肯定不会写错啊,防止我手滑啊好,然后呢,我们这就有了啊,然后把这个东西啊,我们还是传一个地址进去啊。啊library,然后我们现在呢,就已经获取到load library的一个地址了啊,那接下来呢,你可以把它这个给它存一下啊存一下嗯,它是一个模块机制啊,那我们直接来用一个h process啊来进行存储,然后它是一个handle,本质上而言就是一个四子节的一个整数啊,我们直接用一个DD来存储,然后呢,它在它这里的位置上呢,它会调用完之后返回到EXX里,那所以说呢,我们现在呢,就要把它E的到我的放完H后呢下呢,我们可以呢始目标的进程内开辟一段空间啊,这段空间是干嘛使的呢?就是我们一我们有一个动态链接库要加载嘛,我们要把这个东西啊,一会儿呢要用load library把它作为参数,那这个参数肯定不能在我们自己的进程里,要在目标的进程里才能读,对不对啊,所以说呢,我们把要把这个路径写到目标的进程里啊,啊,那么如果有这个。
21:43
需要这个网集课程资料工具的,可以联系咱们公屏上的老满啊,然后或者加入QQ群啊,然后呢,我们啊现在呢,就要干嘛呢,开始这个申请我们的这个内存啊,或或者说叫进程申请内存啊,我们如果要直接的在本进程申请内存呢,是这个lo啊,那我们现在呢,是这个ex。
22:12
R tu,然后和ex啊,这个呢,带ex版本呢,就是跨进程的啊,然后呢,你要在哪一个进程里啊,进行内存的申请啊,那我这儿呢,有一个句柄啊,我直接把这个句柄传过来啊,就是在目标的进程内,然后第二个参数呢,我们直接啊传个now就行了啊,然后第第三个啊参数是你申请多大啊,那我们就给他传一个256这个红啊,这个最大最大路径这个红呢,就代表着256啊然后再下一个呢,我们我不太记得了啊,我们来看一下它的这个函数说明啊。啊,这是这是指啊不对啊,这是微说LEX没错啊,我看一下啊第一个啊句柄,第二个指定地址,我不指定,第三个大小尺寸,然后呢,这个是啊类型是吧,类型的话我这里不用传了,我传个零就行了,或者是闹也行,应该然后类型之后呢,我再看一下。
23:14
类型之后是保护,保护。嗯。类类型我还是得传一下的啊,我传个人应该是不行啊,我传一下类型吧,传一下传一下啊,这个不传应该是会出问题啊,然后呢,我们接下来的这个内存保护,保护呢,我们有几种啊,就是可读可写可执行啊,可以存在形成一种两种三种同时具有都行啊,那我这里呢,我因为是只要写进去一个这个动态链接库的路径,待会儿呢,我在这边要读一下就行了,那所以说呢,我们就要使一个这个读写的这个保护啊。Read外啊就行了,好,然后这样我申请完内存之后呢,我的这个内存的一个这个指针,或者说这个句柄还是什么东西的,反正应该算是指针吧,它就返回到E里了,那我在这呢,我就可以用这个E来判断一下e as啊是不是有效,如果说EAS有效啊,我就继续啊进行下一步的操作啊,如果没无效的情况下呢,就是啊让他出去就行了。
24:19
如果有效的情况下呢,我现在呢,就把这个。我想想啊,我现在呢,把搞一个这个呃,搞一个指针啊,类似于指针的东西来存一下啊,来存一下我的这个空间啊,空间的一个这个指针啊,还是四字节就行了,然后呢,直接啊,我木一下啊,木一下把这个ES的东西木进去。好,然后呢,我们调用一个这个跨进程的写内存的函数啊。In work啊,然后whites。
25:02
Memory。啊调用,然后呢,你要在哪一个进程里写啊,跟我们这个ex一样,然后第二个呢,就是你要写到哪里去啊,那我们刚才这个函数呢,是在目标进程里啊,这个变量呢,是在目标进程里开辟的内存空间的指针啊,那我地址或者是叫地址也行,我就用它了啊把它传进来,然后呢,接下来是你要写什么啊路径,那路径呢,是我在函数做参数的时候接收进来的啊,这个sca的这个PA,然后接下来要写多长啊,就是最大这个路径啊,我们申请就申请了这么大啊,你最多只能写这么大进去,然后最后一个呢,我们传一个闹啊就可以了。啊,有需要领取工具的啊,联系咱们老满啊,然后呢,也可以进入QQ群,好,然后呢,我们有了这个这个写入之后呢,我们现在呢,就可以调用我们刚才说的这个函数啊,然后创建一个远程的线程。
26:05
创建远程线程啊,在哪个进程里创建先传进去,传完之后呢,接下来呢,第二个是now啊,第三个也是now,然后接下来呢,就是我们要要用的函数啊,我们要把哪一个作为启动函数,我们不是加载了这个load library嘛,然后呢,我们这个load library我要我要用一个东西给它存一下啊,那我这呢,用一个一个句柄给它传一下啊,相当于函数指针漏的。好,然后我把这个东西啊,我们给它保存一下。木啊ex好,然后呢,我们给它存进去之后呢,我们在这个位置上啊,就可以把它啊调用起来,下一个呢,就是它的参数,那我们参数已经写到目标进程的这个d name这个地址上了啊,那所以说我们直接传入,再下一个呢,我们传一个now啊,再下一个我们再传一个now啊,这样呢,我们就创建完远程线程了,用完之后呢,我们调用work,调用一下这个close handle。
27:18
然后把我们的这个进程句柄啊关掉就可以了,关掉之后呢。啊,不对,我们要关掉的是现成句柄,先关掉现成句柄,然后呢,关掉完现成句柄之后,如果成功了,我们再给它关闭一次啊,两次close handle啊,因为我们上面还有一个进程。好,然后呢,这样呢,我们就都给它这个关闭掉了,关闭掉之后呢,我们在这个结束之前呢,我们要调用一个这个啊进行返回,好,那这样呢,就是完成了我们一次这个注入的一个工作,那么我们重新生成一下啊,看看这个代码上有没有什么语法上的错误。
28:03
嗯。啊,写错了,少一个E。好,理论上没什么问题啊,那接下来呢,我们再给它这个创建一个按钮啊,用来启动这个东西啊,不然我们现在没有办法去触发这个注入啊,除非你在绘制的时候直接触发啊,那我们要在这个使用它,那我首先我要使用一个这个HWND啊,然后button。T to啊,我们创建一个按钮。然后给他传一个ID。
29:15
好,然后呢,我们现在呢,就来创建一下这个按钮啊,我们在我们的这个消息里啊,我们呃在这啊,我们直接调in work,然后create window ex啊window ex,然后我们开始对它进行一个创建,首先第一个啊是now,然后是off set啊s but一个类名。哦,我看我传错了没有啊,I button。啊,然后下边呢,是这个按钮的这个名称,按钮名称我们单独给他再来一个文本SC啊,Test DB。In啊,INJECT0好,然后呢,我们给它加进去啊,这样呢是第二个显示的文本,显示的文本之后呢,我们给它,呃,写一下基本样式啊,WS啊写ID or w VII Le好,然后呢,是它的起始位置啊,比如说我给了二百一百五啊,大概在中心位置,然后100乘50的一个大小,嗯,接着传一个窗口句柄啊是它的参数。
30:34
接着是传一个是,呃,传一个ID啊。我们刚才写的ID啊,我们传进去,接着要传一个实例句柄啊,是全局变量啊,我们在这个位置。好,最后呢,是一个闹,我们这样就创建完了啊,然后木啊把他的这个按钮句柄啊给他保存起来,虽然这节课我们可能不用啊。
31:04
接着啊,他的这个分发啊,在在这边啊,他如果点击了啊进这边啊,然后呢,我们对它进行一个呃分发啊,那首先是木叶X啊W。这个。好,然后点if啊,Ex等于等于啊,我的这个ID,那就说明是我这个按钮摁的啊,然后n if,那这中间呢,我们就调用我们的函数啊,这个injec。那这呃,我操点错了啊,然后呢,这呢,应该有一个影work,我刚才点哪去了。啊,在这呢啊work好,然后它两个参数,第一个是进程的一个ID啊,那我把它关了,我重新启动了一个啊,然后给他写一个进程ID。
32:06
62956。然后第二个参数呢,就是你要注入这个东西的一个路径啊,那这个路径呢,我们在这给他声明一下,ZDLHBB。然后在这个这里。拿到它的完整路径啊,然后呢,要给它进行一个转移,把它中间的所有单单斜杠变成双斜盖。然后啊,给它的名字也复制过来。好,接着呢,就把它传进去啊。
33:01
A,我们重新生成一下。有一个失败,我看看失败在哪儿啊,这个位置。Size。点EE啊写错了,应该,诶不对啊没错。IDC button。啊,这应该是DD啊,是写错了啊,这应该是DD,然后重新生成。好,我们运行。接着呢,我们点一下啊,点一下测试一下点。好,我们看一下啊,这好像是没有成功啊,没有成功这里啊,我看一下是因为什么,咱们调试一下。在这个这里啊,下一个断点。然后我再,哎,不是这个是这个我点击一下好过来了啊,然后F11。
34:02
进来了啊,我首先我这个静态ID啊,应该是能监视到的啊,我看一下。啊,有需要这个交流呃,领取网际课程的啊,加入咱们QQ群啊,联系咱们老满啊。6295662956没错啊,然后。二逗号可以车。然后走。这个函数现在ES有值。嗯,在这出错错错出错的啊,这个get PRC address,然后它有值,但是size s load library啊,它没有加载到值啊,我看一下这个s library library a。Library,然后加载它怎么会没有值呢?在这。
35:02
找不到指定的程序。难道上面写错了?K32.dr。可能三二点D2也没问题。但找不到指定程序,这是什么情况?难道这块要这么写,我操这这两个指令。没啥区别感觉。运行点击,然后进去。走有走,还是没有找到执行程序,我操。
36:07
啊,我这里没有打开进程,我我我知道因为什么,哎,不对,我这加载这个不跟这个没有关系啊,这个这里。但是我确实没有打开进程啊,我这儿要给他。打开一个进程啊,啊,这个open。Open price。SS啊,加载所权限,然后false。然后WD好,那这块是啥问题,我看一下啊,Get PLC address。
37:25
我用W试一下啊看看。运行。也不是这个原因。
38:38
啊,这好像多了个空格啊,我去。走啊注入,然后啊,注入成功了啊,刚才那个就是多了个空格啊,然后继续。好,然后呢,可以看到啊,这里已经显示注入成功了啊,在我们credit process里啊,已经注入进去了,刚才一直没有成功呢,就是因为我在这个粘贴的时候大意了,这Larry后边呢,A后边给它多加了一个空格,导致找不到它这个进找不到它这个字符串啊好,那么我们这个呢,就已经成功的注入进去了啊,然后呢,这节课呢,就没有什么了啊,如果有问题呢,就可以现在提出来啊,没有问题呢的话呢,我就进入下一个阶段了,如果有需要领取资料的啊,然后可以联系咱们的老满。
39:30
啊,然后进入QQ群。
我来说两句