开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1075|回复: 5
收起左侧

[求助] C/C++转换成易语言

[复制链接]
结帖率:91% (81/89)
发表于 2019-2-16 11:26:11 | 显示全部楼层 |阅读模式   广东省深圳市
C/C++转换成易语言


#include "windows.h"
#include "stdio.h"
#include "tchar.h"
#pragma comment(lib,"Advapi32.lib")
BOOL SetPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
    TOKEN_PRIVILEGES tp;
    HANDLE hToken;
    LUID luid;
    if( !OpenProcessToken(GetCurrentProcess(),
                          TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                 &hToken) )
    {
        _tprintf("OpenProcessToken error: %u/n", GetLastError());
        return FALSE;
    }
    if( !LookupPrivilegeValue(NULL,
                              lpszPrivilege,
                              &luid) )
    {
        _tprintf("LookupPrivilegeValue error: %u/n", GetLastError() );
        return FALSE;
    }
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if( bEnablePrivilege )
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;
    if( !AdjustTokenPrivileges(hToken,
                               FALSE,
                               &tp,
                               sizeof(TOKEN_PRIVILEGES),
                               (PTOKEN_PRIVILEGES) NULL,
                               (PDWORD) NULL) )
    {
        _tprintf("AdjustTokenPrivileges error: %u/n", GetLastError() );
        return FALSE;
    }
    if( GetLastError() == ERROR_NOT_ALL_ASSIGNED )
    {
        _tprintf("The token does not have the specified privilege. /n");
        return FALSE;
    }
    return TRUE;
}
typedef DWORD (WINAPI *PFNTCREATETHREADEX)
(
    PHANDLE                 ThreadHandle,
    ACCESS_MASK             DesiredAccess,
    LPVOID                  ObjectAttributes,
    HANDLE                  ProcessHandle,
    LPTHREAD_START_ROUTINE  lpStartAddress,
    LPVOID                  lpParameter,
    BOOL                 CreateSuspended,
    DWORD                   dwStackSize,
    DWORD                   dw1,
    DWORD                   dw2,
    LPVOID                  Unknown
);
BOOL IsVistaOrLater()
{
    OSVERSIONINFO osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&osvi);
    if( osvi.dwMajorVersion >= 6 )
        return TRUE;
    return FALSE;
}
BOOL MyCreateRemoteThread(HANDLE hProcess, LPTHREAD_START_ROUTINE pThreadProc, LPVOID pRemoteBuf)
{
    HANDLE      hThread = NULL;
    FARPROC     pFunc = NULL;
    if( IsVistaOrLater() )    // Vista, 7, Server2008
    {
        pFunc = GetProcAddress(GetModuleHandle("ntdll.dl"), "NtCreateThreadEx");
        if( pFunc == NULL )
        {
            printf("MyCreateRemoteThread() : GetProcAddress(/"NtCreateThreadEx/") 调用失败!错误代码: [%d]/n",
                   GetLastError());
            return FALSE;
        }
        ((PFNTCREATETHREADEX)pFunc)(&hThread,
                                    0x1FFFFF,
                                    NULL,
                                    hProcess,
                                    pThreadProc,
                                    pRemoteBuf,
                                    FALSE,
                                    NULL,
                                    NULL,
                                    NULL,
                                    NULL);
        if( hThread == NULL )
        {
            printf("MyCreateRemoteThread() : NtCreateThreadEx() 调用失败!错误代码: [%d]/n", GetLastError());
            return FALSE;
        }
    }
    else                    // 2000, XP, Server2003
    {
        hThread = CreateRemoteThread(hProcess,
                                     NULL,
                                     0,
                                     pThreadProc,
                                     pRemoteBuf,
                                     0,
                                     NULL);
        if( hThread == NULL )
        {
            printf("MyCreateRemoteThread() : CreateRemoteThread() 调用失败!错误代码: [%d]/n", GetLastError());
            return FALSE;
        }
    }
if( WAIT_FAILED == WaitForSingleObject(hThread, INFINITE) )
    {
        printf("MyCreateRemoteThread() : WaitForSingleObject() 调用失败!错误代码: [%d]/n", GetLastError());
        return FALSE;
    }
    return TRUE;
}
BOOL InjectDll(DWORD dwPID, char *szDllName)
{
    HANDLE hProcess = NULL;
    LPVOID pRemoteBuf = NULL;
    FARPROC pThreadProc = NULL;
    DWORD dwBufSize = strlen(szDllName)+1;
    if ( !(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)) )
    {
        printf("[错误] OpenProcess(%d) 调用失败!错误代码: [%d]/n",
        dwPID, GetLastError());
        return FALSE;
    }
    pRemoteBuf = VirtualAllocEx(hProcess, NULL, dwBufSize,
                                MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)szDllName,
                       dwBufSize, NULL);
    pThreadProc = GetProcAddress(GetModuleHandle("kernel32.dl"),
                                 "LoadLibraryA");
    if( !MyCreateRemoteThread(hProcess, (LPTHREAD_START_ROUTINE)pThreadProc, pRemoteBuf) )
    {
        printf("[错误] CreateRemoteThread() 调用失败!错误代码: [%d]/n", GetLastError());
        return FALSE;
    }
    VirtualFreeEx(hProcess, pRemoteBuf, 0, MEM_RELEASE);
    CloseHandle(hProcess);
    return TRUE;
}
int main(int argc, char *argv[])
{
    SetPrivilege(SE_DEBUG_NAME, TRUE);
    // InjectDll.exe <PID> <dllpath>
    if( argc != 3 )
    {
        printf("用法 : %s <进程PID> <dll路径>/n", argv[0]);
        return 1;
    }
    if( !InjectDll((DWORD)atoi(argv[1]), argv[2]) )
    {
        printf("InjectDll调用失败!/n");
        return 1;
    }
    printf("InjectDll调用成功!/n");
    return 0;
}

结帖率:99% (71/72)
发表于 2019-2-16 11:31:06 | 显示全部楼层   广东省深圳市
这么长的,定制区也许有大神出手
回复 支持 反对

使用道具 举报

发表于 2019-2-16 11:37:25 | 显示全部楼层   辽宁省大连市
太简单了,你搜索精易和官方论坛关于注入的源码,全都跟这个一个套路,就是些基本的API调用,实在没用价值再写一遍。。
而且懒得写还有几个问题:
1、SetPrivilege 提升进程权限,在新系统(WIN10肯定是,WIN8差不多)是没有任何作用的,你必须得让你的易程序以管理员权限运行才可以,这个你让他点右键或者编译时要求管理员都行,但是没找到能实现的代码方式。。
2、远程线程注入在WIN7下是有问题的,有解决方法但是很复杂,具体看这个帖子我的回复吧:
https://bbs.125.la/forum.php?mod=viewthread&tid=14313438&extra=

补充内容 (2019-2-16 11:38):
也就是 https://blog.csdn.net/crystal0011/article/details/8076130 提供了方案,费劲
回复 支持 反对

使用道具 举报

结帖率:91% (81/89)

签到天数: 7 天

 楼主| 发表于 2019-2-16 11:41:04 | 显示全部楼层   广东省深圳市
shier2817 发表于 2019-2-16 11:37
太简单了,你搜索精易和官方论坛关于注入的源码,全都跟这个一个套路,就是些基本的API调用,实在没用价值 ...

我现在 WIN10,WIN8,XP 注入都OK了! 就是WIN7不行! https://blog.csdn.net/crystal0011/article/details/8076130  这个看不懂呀!
回复 支持 反对

使用道具 举报

发表于 2019-2-16 11:49:36 | 显示全部楼层   辽宁省大连市
pengtusheng 发表于 2019-2-16 11:41
我现在 WIN10,WIN8,XP 注入都OK了! 就是WIN7不行! https://blog.csdn.net/crystal0011/article/details ...

所以你让人翻译你发的代码一点意义没用,他不是解决WIN7的。。。等以后有时间的吧,我研究下那个帖子
回复 支持 反对

使用道具 举报

结帖率:91% (81/89)

签到天数: 7 天

 楼主| 发表于 2019-2-16 11:56:51 | 显示全部楼层   广东省深圳市
shier2817 发表于 2019-2-16 11:49
所以你让人翻译你发的代码一点意义没用,他不是解决WIN7的。。。等以后有时间的吧,我研究下那个帖子

嗯嗯!研究好发出来!其它系统都没问题!就是WIN7
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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