吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5081|回复: 20
收起左侧

[系统底层] 原生进程初体验——Native Process

[复制链接]
BeneficialWeb 发表于 2020-11-20 21:26

原生进程

前些日子看老雷的的软件调试卷二,提到了原生进程。后来又看了某国际同行的视频,学会了如何用vs编译一个Native Process。特此记录

概述

不依赖任何Windows子系统。

只会链接ntdll库

Ntdll里面实现的功能

  • 镜像加载,堆管理器,一些线程池的支持
  • 各种类似c运行时的函数,比如说memset,sprintf
  • 系统调用

特点

运行在系统启动时

  • 经典的例子:autochk.exe
  • 原生进程的pe格式中,子系统定义为Native

smss.exe运行注册表HKLM\System\CurrentControlSet\Control\Session Manager键下BootExecute指定的原生进程

  • 原生进程必须放在System32目录下

Demo

#include <Windows.h>
#include <winternl.h>

extern "C" {
    NTSTATUS NTAPI NtTerminateProcess(
        _In_opt_ HANDLE ProcessHandle,
        _In_ NTSTATUS ExitStatus);
    NTSTATUS NTAPI NtDelayExecution(_In_ BOOLEAN Alertable, _In_opt_ PLARGE_INTEGER DelayInterval);
    NTSTATUS NTAPI NtDrawText(_In_ PUNICODE_STRING Text);
}

#define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)

extern "C" void NTAPI NtProcessStartup(PPEB peb) {
    PROCESS_BASIC_INFORMATION info;
    NtQueryInformationProcess(NtCurrentProcess(), ProcessBasicInformation, &info, sizeof(info), nullptr);
    UNICODE_STRING text;
    RtlInitUnicodeString(&text, L"Hello, Native World!");
    NtDrawText(&text);

    LARGE_INTEGER interval;
    interval.QuadPart = -10000 * 5000;
    NtDelayExecution(FALSE, &interval);
    NtTerminateProcess(NtCurrentProcess(), 0);
}

vs编译选项

  1. 禁用c++异常
  2. 禁用安全检查
  3. 运行时检查为默认值
  4. 子系统设置为Native
  5. 附加依赖项设置为ntdll.lib
  6. 忽略所有默认库
    cpp_compile.jpg
    linker_import.jpg
    linker_subsystem.jpg

运行效果

NativeApp.jpg

免费评分

参与人数 9吾爱币 +14 热心值 +9 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yan182 + 1 + 1 我很赞同!
Wzx157 + 1 + 1 用心讨论,共获提升!
gh0st_ + 1 用心讨论,共获提升!
1668196520 + 1 + 1 热心回复!
Cdreamfly + 1 + 1 我很赞同!
qaz003 + 1 + 1 哈哈哈,当年某挂就是这么启动的。。爽死
zwp10200 + 1 + 1 用心讨论,共获提升!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jkj 发表于 2021-5-22 10:11
sam喵喵 发表于 2021-5-21 22:20
有什么用大佬,求科普

不是大佬,我也是从楼主这学习了该方法,谢谢楼主。

至于我说的效果,比如有时候我们需要程序尽早启动,以便尽早得到控制权,就可以使用该方法。比如做杀毒、检查、等等,这个可以发挥自己想象。
程序尽早掌握了控制权,就可以做自己想要的事情。

当然,如果真的做杀毒等安全相关的,必须要做到驱动级了。但是Native App方法用于一般用途还是可以的。
sam喵喵 发表于 2021-5-22 10:16
jkj 发表于 2021-5-22 10:11
不是大佬,我也是从楼主这学习了该方法,谢谢楼主。

至于我说的效果,比如有时候我们需要程序尽早启动 ...

记起来了,昨天在论坛读到一篇大佬文章,兵马未动,粮草先行。文章描述ntdll好像是连接用户和内核的必经之地,是不是绕过了用户API直接就可以CALL内核,只是速度上更快了吗
大公无私 发表于 2020-11-20 21:37
jinlizhu 发表于 2020-11-20 21:38
有点小深奥
cheng5k 发表于 2020-11-20 21:49
经典的例子,学习了!
liujieboss 发表于 2020-11-20 23:19
谢谢分享
qaz003 发表于 2020-11-21 00:15
看到这个又回忆起当年用挂的时代了。。比其它卫士先进驻然后各种奔放
tsecond 发表于 2020-11-21 05:35
初体验 看起来不错!
jkj 发表于 2020-11-21 11:07
这个很有用,可以实现一些希望的效果,感谢分享!
zigzag 发表于 2020-11-21 11:32
感谢分享!楼主威武!
Cdreamfly 发表于 2020-11-21 17:06
不支持操作,未知错误:0x80070081
是什么情况?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 08:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表