小编joh*_*doe的帖子

如何在 g++ 中“使用 unicode 字符集”?

我正在 C++ 中开发一个程序,我试图在 Windows 中使用 WriteProcessMemory() 函数。为此,我需要一个获取目标进程 ID 的函数。我可以使用以下功能做到这一点:

#pragma once
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>

//get process id from executable name using tlhelp32snapshot
DWORD GetProcID(wchar_t *exeName){
    PROCESSENTRY32 procEntry = {0};
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (!hSnapshot) {
        return 0;
    }
    procEntry.dwSize = sizeof(procEntry);
    if (!Process32First(hSnapshot, &procEntry)) {
        return 0;
    }
    do {
        if (!wcscmp(procEntry.szExeFile, exeName)) {
            CloseHandle(hSnapshot);
            return procEntry.th32ProcessID;
        }
    } while (Process32Next(hSnapshot, &procEntry));
    CloseHandle(hSnapshot);
    return 0;
}

//main function
int main() {
    using namespace std;

    cout …
Run Code Online (Sandbox Code Playgroud)

c++ windows unicode g++ cl

5
推荐指数
0
解决办法
1460
查看次数

如何正确打印内存中变量的地址?

我试图了解c或c ++结构如何存储在内存中。

我用C ++写了一个小程序,然后编译并运行到调试器中。我使用带有%p和&variable的printf来打印地址,但是打印出的地址和内存中的实际地址完全不同。实际上,打印的地址甚至无效。

任何想法我怎么能正确打印变量或结构的真实地址?

谢谢

这是我编写的程序的源代码:

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define XXX __asm__("nop");

int main(){
    XXX;
    XXX;
    const char *short_string = "this is a short string";
    const wchar_t *long_string = L"this is a long string";
    int a = 2;
    int b = 3;
    int c = a + b;
    int *pointer_to_a = &a;

    std::cout << "the address of short_string is: " << &short_string << std::endl;
    std::cout << "the address of long_string is: " << &long_string …
Run Code Online (Sandbox Code Playgroud)

c++ memory windows ollydbg

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

连接到自己的网络守护程序意味着什么?

我目前正在overoverwire.org上进行强盗战争游戏(针对那些不知道这是一个网站的人,他们需要执行不同的任务以提高自己的黑客技能)。我以前做过它们,但是我很早就被卡住了,我用扰流板对它们进行了爆炸。这样做的好处是,它为“可重播性”留了很多空间。xD现在我在bandit20,我需要使用一个可执行文件:

/home/bandit20/suconnect
usage: ./suconnect <port number>
Run Code Online (Sandbox Code Playgroud)

“将使用TCP连接到本地主机上的给定端口。如果它从另一端收到正确的密码,则将下一个密码发送回去。”

我最初的反应是拉出nmap并寻找开放端口。我确实找到了一些打开的,其中一些正在运行echo和一些openssl。总共有5个开放的端口,无论运行的服务如何,我还发现使用ps -alx在后台运行的netcat监听另一个第6个端口。

现在,任务说明显示:

[文件]在您指定为命令行参数的端口上与本地主机建立连接。然后,它从连接中读取一行文本,并将其与上一级密码(bandit20)进行比较。如果密码正确,它将传输下一级密码(bandit21)。注意:尝试连接到您自己的网络守护程序,以查看其是否按您的想法工作

我使用预期的语法尝试了找到的所有6个端口,但它们均未返回任何内容。我确实在扰流板的博客上找到了网站上的一个较旧的描述,内容是:

要达到此级别,您需要登录两次:一次运行setuid命令,一次启动setuid将连接到的网络守护程序。

我尝试过两次sshing,并使用二进制文件在所有这些端口和第二个窗口中进行侦听,但是它什么也没做。问题是在我运行二进制文件后,它给了我一个空白命令行,但是无论我键入什么,它都没有任何输出。我在文件上使用了字符串,但我发现它确实存在无法连接的失败消息,错误的密码,正确的密码等,但我没有收到任何信息。

我希望在这种情况下更多地了解基本概念,而不是交给解决方案。我不确定连接到您自己的网络守护程序意味着什么(我尝试使用Google谷歌搜索并在youtube上查找,但我不太了解网络守护程序是什么,或者连接到网络守护程序意味着什么)。还必须运行2个终端似乎很重要,因为他们将其取出来了,但是在这种情况下,我似乎无法弄清楚您应该怎么做或应该使用它做什么。另外,要侦听我使用netcat的本地主机上的端口,请不确定是否还有其他更好的方法,或者您是否应该使用其他任何方法。

任何反馈都非常感谢,谢谢:)

networking daemon setuid bandit

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

标签 统计

c++ ×2

windows ×2

bandit ×1

cl ×1

daemon ×1

g++ ×1

memory ×1

networking ×1

ollydbg ×1

setuid ×1

unicode ×1