
发表日期: 2021-04-28 09:42:31 浏览次数:103
汝州网站制作【汝州网站优化】汝州建网站、汝州微信公众号运营、汝州网页设计、汝州微信小程序商城
汝州市位于河南省中西部,因北汝河贯穿全境而得名,总面积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...

服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878