24小时接单的黑客

黑客接单,接单的黑客,如何联系黑客,如何找黑客,黑客服务

网络安全编程:C语言逆向之wcslen函数

wsclen函数是用于获得字符串长度的函数,准确地说,是用于获得UNICODE字符串长度的函数,其界定如下所示:

  • size_twcslen(constwchar_t*string);
  • 该界定源自MSDN。wcslen()函数的实际用法,这儿也不开展讲解了,关键看它的反汇编编码完成。

    用OD开启一个自身写的程序,这一程序里运用了UNICODE字符串数组,也采用了wsclen()函数来测算UNICODE字符串数组函数的长短,随后在OD中的wsclen()函数处设定中断点,运作程序。当程序启用wcslen()函数时,OD会被终断,各自查询OD的反汇编对话框、转存窗口(也称数据信息对话框)和栈窗口,如下图1、图2和图3所显示。

    图1 反汇编对话框

    图2 转存窗口

    图3 栈对话框

    从图 3 中可以看得出,wcslen()函数的基本参数是“c:\windows\system32\notepad.exe”这一UNICODE字符串数组。图2中展现了wcslen()函数主要参数的运行内存状况。图1是wcslen()函数的反汇编编码。

    wcslen()函数的反汇编代码如下所示:

  • 77C17FCCm>8BFFmovedi,edi
  • 77C17FCE55pushebp
  • 77C17FCF8BECmovebp,esp
  • 77C17FD18B4508moveax,dwordptr[ebp 8]
  • 77C17FD466:8B08movcx,wordptr[eax]
  • 77C17FD740inceax
  • 77C17FD840inceax
  • 77C17FD966:85C9testcx,cx
  • 77C17FDC^75F6jnzshort77C17FD4
  • 77C17FDE2B4508subeax,dwordptr[ebp 8]
  • 77C17FE1D1F8sareax,1
  • 77C17FE348deceax
  • 77C17FE45Dpopebp
  • 77C17FE5C3retn
  • 在OD中应用F8断点调试到77C17FD4详细地址处,查询存储器eax的值。eax的值储存的是wcslen()函数的主要参数。实际上根据“mov eax, dword ptr [ebp 8]”就可以看得出eax被取值为wcslen()函数的变量值。

  • 77C17FD466:8B08movcx,wordptr[eax]
  • 77C17FD740inceax
  • 77C17FD840inceax
  • 上边3句反汇编编码是eax详细地址处的2字节数的內容取值给cx存储器,随后将eax的详细地址持续加2次1。

  • 77C17FD966:85C9testcx,cx
  • 77C17FDC^75F6jnzshort77C17FD4
  • 上边2句反汇编编码是检测cx中的信息是不是为0。UNICODE字符串数组是以2个0来开展末尾的。假如不以完毕得话,表明都还没到UNICODE字符串数组的末尾,那麼就自动跳转到77C17FD4详细地址处,再度实行“mov cx, word ptr [eax]”命令。这一循环系统是逐一解析xmlUNICODE字符串数组,直到字符串完毕才行。

  • 77C17FDE2B4508subeax,dwordptr[ebp 8]
  • 77C17FE1D1F8sareax,1
  • 77C17FE348deceax
  • 当上边的循环系统解析xml详细个UNICODE字符串数组后,eax的值偏向了字符串数组末尾的2个0后边的详细地址部位。由于从77C17FD4到77C17FD8这三个详细地址处的编码可以看得出,该函数是先取字符串数组中的內容,再改动UNICODE表针的详细地址。那样当得到字符串数组的末尾详细地址后,再改动字符串数组表针详细地址,则表针会偏向字符串数组末尾的2个0后边的详细地址。

    在77C17FDE处,将eax的地址(也就是字符串数组末尾2个0后边的详细地址)减掉字符串数组的开始详细地址,就获得字符串数组所占有的运行内存字节。在计算机系统中,二进制位偏移一位,等同于乘2;偏移一位,等同于除于2。在77C17FEl中,sar命令是将目地操作数开展偏移计算。“sar eax, 1”是将eax中的值除于2,并将結果存放在eax中。字符串数组用UNICODE方法开展储存,1字符占有2字节数,那麼将所占有的运行内存数除于2也就获得了字符串数组的标识符数量。而“dec eax”的功能是将eax的值减一,将結果存放在eax中。

    最终,完成一个wcslen()函数。为了更好地使其看上去像反汇编编码,将其写的略微繁杂些,详细如下:

  • #defineUNICODE
  • #define_UNICODE
  • #include<Windows.h>
  • #include<stdio.h>
  • #include<tchar.h>
  • intMyWcslen(constwchar_t*wText)
  • {
  • wchar_t*wpChar=(wchar_t*)wText;
  • wchar_twChar;
  • intiNum=0;
  • do
  • {
  • wChar=*wpChar;
  • wpChar =1;
  • }while(wChar!=0);
  • iNum=(BYTE*)wpChar-(BYTE*)wText;
  • iNum/=2;
  • iNum--;
  • returniNum;
  • }
  • intmain()
  • {
  • wchar_t*wText=_TEXT("helloworld");
  • printf("%d\r\n",wcslen(wText));
  • printf("%d\r\n",MyWcslen(wText));
  • return0;
  • }
    • 评论列表:
    •  丑味败骨
       发布于 2022-05-28 21:19:29  回复该评论
    • en()函数来测算UNICODE字符串数组函数的长短,随后在OD中的wsclen()函数处设定中断点,运作程序。当程序启用wcslen()函数时,OD会被终断,各自查询OD的反汇编对
    •  世味双笙
       发布于 2022-05-28 14:16:03  回复该评论
    • ar;wpChar =1;}while(wChar!=0);iNum=(BYTE*)wpChar-(BYTE*)wText;iNum/=2;iNum--;returniNum;}intmain(){wchar_t*wText=_TEXT("hellowor
    •  弦久野の
       发布于 2022-05-28 19:31:43  回复该评论
    • 7FD4详细地址处,再度实行“mov cx, word ptr [eax]”命令。这一循环系统是逐一解析xmlUNICODE字符串数组,直到字符串完毕才行。77C17FDE2B4508subeax,
    •  只影怯慌
       发布于 2022-05-28 15:53:17  回复该评论
    • 转存窗口(也称数据信息对话框)和栈窗口,如下图1、图2和图3所显示。图1 反汇编对话框图2 转存窗口图3 栈对话框从图 3 中可以看得出,wcslen()函数的基本参数是“c:\win

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.