汝州网站制作【汝州网站优化】汝州建网站、汝州微信公众号运营、汝州网页设计、汝州微信小程序商城-小程序制作-网站建设【企业网站制作|网页设计】- 高端网站建设 - 书生商友信息科技-

全国热线:400-111-6878

网站建设推广专家

汝州网站制作【汝州网站优化】汝州建网站、汝州微信公众号运营、汝州网页设计、汝州微信小程序商城

发表日期: 2021-04-28 09:42:31 浏览次数:112

汝州网站制作【汝州网站优化】汝州建网站、汝州微信公众号运营、汝州网页设计、汝州微信小程序商城


汝州市位于河南省中西部,因北汝河贯穿全境而得名,总面积1573平方公里,总人口120万,辖21个乡镇街道,459个行政村,是平顶山市下辖的县级市,也是河南省十个省直管县试点之一。

汝州是历代郡州治所。从公元606年的隋朝设立汝州以来,距今已有1400多年的历史。

汝州距离省会郑州90公里、洛阳70公里、平顶山60公里,焦枝(柳)铁路、宁洛高速、二广高速、林桐高速穿境而过,在1小时交通圈内通达郑州国际机场、洛阳机场,已建成和规划建设的郑万高铁、郑洛城际铁路、洛平漯周高铁、三洋铁路紧临汝州或在汝州设站。

汝州境内旅游景点达到852个,省级以上重点文物保护单位20个,其中国家重点文物保护单位10处,拥有风穴寺、九峰山等2个4A级景区,怪坡、中国汝瓷小镇、丹阳湖景区、汝水湾景区、汝河沙滩公园等5个3A级景区。共有37个具有开发价值的古寨古堡,夏店镇山顶村、蟒川镇半扎村、大峪镇青山后村、焦村镇张村等4个是国家级传统村落。九峰山、紫云山、蒋姑山、大红寨等风景名胜,罗圈地质公园冰川遗址是世界四大冰川地质遗址之一。

汝州市为国家园林城市、国家卫生城市、全国绿化模范市、全国文明城市城市,被评为全国第二批节水型社会建设达标市、全省水生态文明城市、全省首批全域旅游示范市、首批省级森林城市,荣获中国十佳绿色城市、全国文旅融合特色创新示范市、中国汝瓷之都等称号,海绵城市项目荣获中国人居环境范例奖,PPP项目实施和土地节约集约利用两项工作受到国务院通报表彰。 [1] 


起因,由于部分网站升级https加密协议至tls1.2,而WinXP的schannel不支持tls1.2,使用windows SSPI提供https能力的软件,在XP下不能访问tls1.2的网站。


因此,thunder和IDM等下载软件,在后期版本里,都引入了openssl来支持https.


至笔者发文时,IDM的最新版本是v6.38b21,其在SSPI方式失败的时候,会尝试openssl来连接。


但是笔者发现,WinXP下IDM仍不能下载部分https链接,提示:



图例Url是:https://www.appinn.com/wp-content/uploads/Appinn-icon-32.jpg


wireshark抓包,与笔者调用openssl成功下载的demo对比发现:



下载失败的那种情况,SSL握手的时候,扩展字段里缺少了server_name.


对比IDM的SSL相关实现,发现它缺少了很重要的一句,SSL_set_tlsext_host_name(sslHandle, host);


// Connect the SSL struct to our connection

        if (!SSL_set_fd (sslHandle, (int)socket))

            ERR_print_errors_fp (stderr);


        SSL_set_tlsext_host_name(sslHandle, host);


        // Initiate SSL handshake

        if (SSL_connect (sslHandle) != 1)

            ERR_print_errors_fp (stderr);


于是需要给IDMan.exe里补丁上这一句:


1 查壳,无壳。

2 查导入表表,没发现libssl.dll.

3 windbg Ctrl+e IDMan.exe,sxe ld libssl.dll,返回至IDMan.exe领空,发现:

LoadLibraryW(libssl.dll);

GetProcAddress(h_libssl_dll, "SSL_connect");


SSL_set_tlsext_host_name宏实际是SSL_ctrl(),但是上面初始化ssl函数的函数里,没有初始化SSL_ctrl,给它补一个:

3.1 .rdata节末尾空白处,加一个字符串pch_SSL_ctrl"SSL_ctrl";

3.2 .data节末尾空白处加一个变量存SSL_ctrl地址;

3.3 在.text节末尾空白处加:

  test    bl, bl

  jnz     L_Fail

  push    offset pch_SSL_ctrl ; lpProcName

  mov     eax, h_libssl_dll

  push    eax             ; hModule

  call    esi ; GetProcAddress

  mov     SSL_ctrl, eax

  cmp     eax, edi

  jz      L_Fail

  jmp     L_Success


3.4 在初始化ssl函数的函数里,原来初始化玩最后一个SSL函数,即SSL_read后,跳到L_SSL_ctrl,

  push    offset aSsl_read ; "SSL_read"

  mov     ecx, h_libssl_dll

  push    ecx             ; hModule

  call    esi ; GetProcAddress

  mov     SSL_read, eax

  cmp     eax, edi

  jnz     L_SSL_ctrl

  

这样就找到了SSL_ctrl的地址。


4. bp libssl!SSL_connect,下载https://www.appinn.com/wp-content/uploads/Appinn-icon-32.jpg,断下,返回至IDMan.exe领空;

在SSL_connect之前,我们要想办法插入SSL_set_tlsext_host_name(sslHandle, host);

SSL_set_tlsext_host_name有两个参数,明显这里能直接拿到sslHandle,而host是Url中的www.appinn.com,猜测在此处函数里的this指针里,会有这个host的存在。

SSL_set_tlsext_host_name宏实际是SSL_ctrl。


bp ws2_32!gethostbyname, 笔者这里第五次命中时会进入openssl流程,返回至IDMan.exe领空,能看到:


  v5 = *(_DWORD *)(this_ + 0x184);

  if ( v5 )

    v6 = *(_BYTE *)(v5 + 0x15C);

  else

    v6 = 0;


  if ( v6 )

  {

    host = *(char **)(v5 + 0x140);

  }

  else

  {

    v9 = *(char ***)(this_ + 0xB4);

    if ( !v9 )

      v9 = *(char ***)(this_ + 0xB0);

    host = *v9;

  }

这里就拿到了host的位置,实际后面我们用到的是poi(poi(this_ + 0xB0))。


返回一开始断SSL_connect的地方,返回IDMan领空,把call SSL_connect改为:


  mov     ecx, [esi+3450h]

  push    ecx

  nop

  jmp     L_SSL_ctrl_setServerName  // 原来是call SSL_connect

  

在.text节末尾空白处加:

   L_SSL_ctrl_setServerName proc near

                 mov     eax, [esi+0B0h]

                 mov     eax, [eax]

                 push    eax             ; _DWORD

                 push    0               ; _DWORD

                 push    37h             ; _DWORD

                 push    ecx             ; _DWORD

                 call    SSL_ctrl

                 add     esp, 10h

                 call    SSL_connect

                 jmp     原始call SSL_connect后一句

 L_SSL_ctrl_setServerName endp

 

 

 测试OK ~

 

 PS:

 1.汇编代码可以用VS 里 __asm{ xxx xxx}, 反编译后拿到。

 2.jmp等的opcode自己构造,目标地址-原始地址-5,如果是负值用补码;

 3.用IDA patch的,菜单Edit -> Patch program -> Change byte,完成后Apply patches to input file...


微信图片_20210425092605.jpg


汝州网站制作汝州网站优化汝州建网站、汝州微信公众号运营、汝州设计、汝州微信小程序商城

上一条:蓬莱申请400电话费用【蓬莱企业全国热线电话办理】蓬莱开通400电话电信价格、蓬莱微信公众号代运营外包托管、蓬莱网店编辑装修美工、蓬莱网站推广优化大概需要多少钱
下一条:汝州微信公众号开发【汝州网络推广】汝州建站、汝州网站维护、汝州网页制作、汝州微信小程序代运营公司
网站制作
小程序制作
网站优化
网站开发
400电话办理
网络推广
网站建设
网店装修
微信公众号开发
网页设计
网络公司
域名企业邮箱
服务器空间
网站案例报价
百科问答
编辑排版美工
App软件开发
百度推广
代运营托管
logo设计
网络全网营销
网站备案
网站定制
小程序开发公司
首页
电话
立即预约