小编Tot*_*ion的帖子

是否可以在装配中进行自定义中断?

在汇编语言中,我们有DOS中断INT 21h,它不是硬件中断.

我想知道是否可以编写自己的中断并调用它.

如果可能,请建议链接或方法.

x86 assembly interrupt

7
推荐指数
1
解决办法
5777
查看次数

用汇编语言改变CS:IP

你怎么能强行改变CSIP无论是在汇编语言?

ORG指令可以用来改变数量IP,但你怎么改变CS

基本上我想用汇编实现多线程.

许多论坛,包括堆栈溢出问题都说不可能,但那么C有多线程选项,即使是汇编代码也是如此?

x86 assembly

3
推荐指数
1
解决办法
4012
查看次数

试图从内存中打印出有用的数据

void update_memblock(MEMBLOCK *mb)
{
    static unsigned char tempbuf[128 * 1024];
    SIZE_T bytes_left;
    SIZE_T total_read;
    SIZE_T bytes_to_read;
    SIZE_T bytes_read;

    bytes_left = mb->size;
    total_read = 0;

    while (bytes_left)
    {
        bytes_to_read = (bytes_left > sizeof(tempbuf)) ? 
sizeof(tempbuf) : bytes_left;
        ReadProcessMemory(mb->hProc, mb->addr + total_read, 
tempbuf, bytes_to_read, &bytes_read);
        if (bytes_read != bytes_to_read) break;

        memcpy(mb->buffer + total_read, tempbuf, bytes_read);

        bytes_left -= bytes_read;
        total_read += bytes_read;
    }
    mb->size = total_read;
}
Run Code Online (Sandbox Code Playgroud)

这是我当前的代码,我最初正在阅读另一个进程'内存使用ReadProcessMemory.现在我存储了临时数据tempbuf.我能够以tempbuf十六进制形式输出数据.但是我打算如图所示显示它,另外我在这里遇到的另一个复杂因素是bytes_left> sizeof(tempbuf)我只读取相当于tempbuf大小的足够数据.如何读取更多数据,因为我定义的数组只能支持尽可能多的数据?

in_this_format

c memory windows hexdump

2
推荐指数
1
解决办法
271
查看次数

从用户模式运行内核模式系统调用

我试图读取某些进程的内存,如csrss.exe使用OpenProcess().问题是,一旦我使用PROCESS_ALL_ACCESS这些进程就无法打开.所以我尝试使用PROCESS_QUERY_LIMITED_INFORMATION参数,但不会获得多汁的结果.

根据我对系统的理解,这个功能最终会调用ZwOpenProcess().我目前的理解是,如果应用程序在用户模式下访问它,则此调用也将被视为来自用户模式而不是内核模式的调用.

为了绕过这个检查,我做了以下事情:

  1. 使用IDA打开ntdll.dll所有这些进程所在的位置.
  2. 找到这个功能,这就是我找到的.

Cap_1 所以再次从我的理解,它执行测试,然后如果它评估为0,它执行低延迟系统调用,我相信这是函数的内核模式版本.

接下来我做了同样的事情ZwReadVirtualMemory(): Cap_2

所以这是我的问题:

  1. 我可以直接创建.asm文件并在其中编写这些过程并调用它们以获取内核模式访问这些函数吗?
  2. PROCESS_ALL_ACCESS如果我使用上述方法调用它们,将适用于这些例程.
  3. 我还需要使用VirtualQueryEx()我找不到内核模式替换,在这种情况下,我打算VirtualQueryEx()与上面提到的自定义调用一起使用.现在我的问题是,因为VirtualQueryEx()不是内核模式调用(至少在顶部,我的意思是ReadProcessMemory()调用ZwReadVirtualMemory但是如果由用户模式程序启动则不是内核模式调用,情况也是如此VirtualQueryEx()),这是一个问题,还是在我进行下一次自定义调用时会恢复到用户模式?

我自己做这一切的最终目标是能够使用内核级特权打开所有进程,读取内存并将其转储到文件中.这还包括在系统级运行的进程,如csrss.exe.如果存在任何更简单的方法,请用同样的方式启发我.

Code :

HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
HANDLE lProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
DWORD error = GetLastError();

if (hProc || lProc)
    {


            //(!hProc && lProc) ? printf("lproc") : printf("hProc"); //Testing Condition
            fProc = (!hProc && lProc) ? lProc : hProc;

        while (1) {
            if …
Run Code Online (Sandbox Code Playgroud)

c assembly kernel ida

1
推荐指数
1
解决办法
581
查看次数

在C中有没有比unsigned long long int长的东西?

我正在使用unsigned long long int来存储文件中的字符数.而且我很害怕它的范围很快就会被绕过.是另一种数据类型,它可以保存多于unsigned long long int的值吗?

我还需要2个unsigned long long int数组来存储指向文件中某些位置的指针.但是,我可以在一个数组中拥有的最大元素数是10000.有没有办法获得更多?

c

0
推荐指数
1
解决办法
462
查看次数

标签 统计

assembly ×3

c ×3

x86 ×2

hexdump ×1

ida ×1

interrupt ×1

kernel ×1

memory ×1

windows ×1