飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4895|回复: 5

[x64] HiJackDLL64劫持测试情况

[复制链接]
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

    发表于 2015-1-13 14:33:26 | 显示全部楼层 |阅读模式
    本帖最后由 lucky_789 于 2015-1-13 18:11 编辑

    HiJackDLL64劫持dll的函数很成熟,测试了无数遍了。为了测试dll导出数组,昨晚学习了一晚上的dll编程。测试结果出乎意料{:soso_e127:},也可能是编程出现错误。现将情况报告一下。

    为了测试,建3个项目:原带输出数组的DLLSample.dll、劫持的DLLSample.dll、测试程序testDll.exe

    1、原带输出数组的DLLSample.dll


    1. //DLLSample.h

    2. #ifdef DLLSAMPLE_EXPORTS
    3. #define DLLSAMPLE_API __declspec(dllexport)
    4. #else
    5. #define DLLSAMPLE_API __declspec(dllimport)
    6. #endif

    7. extern DLLSAMPLE_API int arrMyNum[];        //输出数组
    8. DLLSAMPLE_API int GetArrNum(int x);                //输出函数
    复制代码

    1. // DLLSample.cpp : 定义 DLL 应用程序的导出函数。
    2. //

    3. #include "stdafx.h"
    4. #include "DLLSample.h"


    5. // 这是导出变量的一个示例
    6. int arrMyNum[4] = {0};

    7. // 这是导出函数的一个示例。
    8. int GetArrNum(int x)
    9. {
    10.         arrMyNum[0] = x * 1;
    11.         arrMyNum[1] = x * 2;
    12.         arrMyNum[2] = x * 3;
    13.         arrMyNum[3] = x * 4;
    14.         return 1;
    15. }
    复制代码


    如果这样,导出函数和数组长的这样:
    Snap1.png

    神奇生成的就是这样:
    Snap2.png

    添加一个def吧:
    DLLSample.def:
    1. LIBRARY        "DLLSample"

    2. EXPORTS
    3. GetArrNum
    4. arrMyNum        DATA
    复制代码
    这样看的就和常见的一样了:
    Snap4.png


    2、测试程序testDll.exe:

    1. //testDll.cpp

    2. #include <Windows.h>
    3. #include <stdio.h>
    4. #include "DLLSample.h"

    5. #pragma comment(lib, "DLLSample.lib")


    6. int main()
    7. {
    8.         int x;
    9.         x = 100;
    10.         GetArrNum(x);                                        //测试导出函数
    11.         printf("%d\n", arrMyNum[0]);        //测试数组
    12.         printf("%d\n", arrMyNum[1]);
    13.         printf("%d\n", arrMyNum[2]);
    14.         printf("%d\n", arrMyNum[3]);
    15.         ::system("pause");
    16.         return 0;
    17. }
    复制代码


    OK,编译成功,运行结果:
    Snap5.png


    3、建立劫持项目

    先将DLLSample.dll改名为DLLSample.PYG,用神奇生成模板:
    DLLSample.def
    NsHiJack.asm
    NsHiJack.h

    新建另一个DLLSample.dll(劫持用),将上述3个文件拷贝到项目中:
    Snap8.png

    编译:
    1. 正在编译资源清单...
    2. Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
    3. Copyright (C) Microsoft Corporation.  All rights reserved.
    4. 正在链接...
    5. LINK : 没有找到 C:\myProcs\test\DLLSample\x64\Debug\DLLSample.dll 或上一个增量链接没有生成它;正在执行完全链接
    6. x64\Debug\NsHiJack.obj : warning LNK4003: 无效的库格式;已忽略库
    7. x64\Debug\NsHiJack.obj : warning LNK4003: 无效的库格式;已忽略库
    8.    正在创建库 C:\myProcs\test\DLLSample\x64\Debug\DLLSample.lib 和对象 C:\myProcs\test\DLLSample\x64\Debug\DLLSample.exp
    9. x64\Debug\NsHiJack.obj : warning LNK4003: 无效的库格式;已忽略库
    10. 正在嵌入清单...
    11. Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
    12. Copyright (C) Microsoft Corporation.  All rights reserved.
    13. x64\Debug\NsHiJack.obj : warning LNK4003: 无效的库格式;已忽略库
    14. x64\Debug\NsHiJack.obj : warning LNK4003: 无效的库格式;已忽略库
    15.    正在创建库 C:\myProcs\test\DLLSample\x64\Debug\DLLSample.lib 和对象 C:\myProcs\test\DLLSample\x64\Debug\DLLSample.exp
    16. x64\Debug\NsHiJack.obj : warning LNK4003: 无效的库格式;已忽略库
    17. 生成日志保存在“file://c:\myProcs\test\DLLSample\DLLSample\x64\Debug\BuildLog.htm”
    18. DLLSample - 0 个错误,6 个警告
    19. ========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
    复制代码


    成功。
    Snap10.png
    将新的DLLSample.dll复制到testDll.exe目录,运行:

    Snap9.png

    结果是错误的。

    劫持是成功的:
    Snap11.png

    问题出在哪里呢?

    Snap12.png

    跟进去:

    Snap13.png
    走出来就不对了: Snap14.png
    是否要用指针取数组?晚上再测试了

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2015-1-13 14:49:54 | 显示全部楼层
    问题可能在这里
    lpk 的导出数组是dll初始化(dllmain 或 代码已直接赋值)的时候就已经赋值了,而你的导出数组是需要在调用某个函数后才给予赋值。劫持dll是在初始化的时候就把你导出的数组的数据进行了COPY,大约问题就出在这里。这种的话劫持貌似无解(需要在调用赋值函数的时候再次对导出数据赋值)。

    点评

    原来是这样啊。还有导出的类没有测试,回头找空也测试一下。  详情 回复 发表于 2015-1-13 18:07
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2023-11-16 16:09
  • 签到天数: 821 天

    [LV.10]以坛为家III

    发表于 2015-1-13 15:41:32 | 显示全部楼层
    好大个HyperSnap水印~

    点评

    时间太匆忙了,没来得及“注册”  详情 回复 发表于 2015-1-13 18:08
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

     楼主| 发表于 2015-1-13 18:07:03 | 显示全部楼层
    Nisy 发表于 2015-1-13 14:49
    问题可能在这里
    lpk 的导出数组是dll初始化(dllmain 或 代码已直接赋值)的时候就已经赋值了,而你的导 ...

    原来是这样啊{:soso_e154:}。还有导出的类没有测试,回头找空也测试一下。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-9-27 19:17
  • 签到天数: 31 天

    [LV.5]常住居民I

     楼主| 发表于 2015-1-13 18:08:15 | 显示全部楼层
    qqlinhai 发表于 2015-1-13 15:41
    好大个HyperSnap水印~

    时间太匆忙了,没来得及“注册”{:soso_e113:}
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2022-2-19 11:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-7-1 10:10:17 | 显示全部楼层
    什么时候可以放出来工具啊,
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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