<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>冲鸭安全</title>
    <link>https://wechat2rss.xlab.app/feed/25499156ea68aa4ac597801e9be69707e31bba73.xml</link>
    <description>我们阻止威胁&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (冲鸭安全)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/LIUI5tJGiauBGlPNd8rKaCLywV6kQHBxolRKEfbic65PydhCB4ot3tvXNPxPphRx9oiaUzpJiaiadjEM/0</url>
      <title>冲鸭安全</title>
      <link>https://wechat2rss.xlab.app/feed/25499156ea68aa4ac597801e9be69707e31bba73.xml</link>
    </image>
    <item>
      <title>修复10年前游戏的BUG</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247486286&amp;idx=1&amp;sn=5741b86043e4a5c0c73d97cdf00bda3d</link>
      <description>前言这几天在跟朋友玩《异形:殖民军》这款游戏，这款游戏于2013年发售，制作完后制作组就跑路了。</description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2026-05-28 08:00</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a4599ef0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVMTOia2DUuFwXhwibJTjcFOklesRjdvGuuhUxiaBb4ictTP63Wln1FdibVNXBUDiagHYMkPtXZO4nAeOSWMY6AY6k8IhxV4tyMWvoGzE%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这几天在跟朋友玩《异形:殖民军》这款游戏，这款游戏于2013年发售，制作完后制作组就跑路了。可以简单理解为这是一款太空版支持联机过剧情的使命召唤like游戏。我们两个下的都是FLT修改版本，本来想以前走hamachi局域网联机。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002610" style="" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=2393851f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNmr6GTAu5Eljh1FnUHgPCNDeyMxLR8gfZrHAiczK7mlrzIUY9DcX3h4W7En9R3ps3YrGDrT1LxgiaHDiaV7h0iaoPB1qGdRTaCVEk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">但是意外发生了，我们死活联机不上。提示找不到游戏。随后我们试了一下tun方案/对战平台方案，完全没办法联机。</span></p><p><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002614" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=63e29eb6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMkVkmuJ72UkBoF0PSGEkAtkep3EQxIia33TJAhJXSowX6S8wOgUuybHDT4mldGAMWEfzk0mynDRFHibU1CX0VcKdedf5z3kL9o8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">可是我记得十年前玩的时候是可以正常联机的。问题出在哪？</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">联机流程</span></h2><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">由于游戏早就死了，steam买不值得，我们用的是盗版，盗版走的是局域网联机方案，所谓局域网联机方案，一般指的是用hamachi或者对战平台或者各种联机工具 建立一个虚拟局域网，大家都有一样的虚拟局域网ip</span></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002615" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3bf23a03&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNW1DQCStStRibCcS4D2JX2ePvvA7O29icqMVs4PuZcVL8BGphvkRpUog1hmcPxtziaQH0NyPCiapxa42KAbptFYiarCIyGexb3hxrg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">这个虚拟机的网卡就是假的局域网，从而让大家走“局域网联机”</span></span></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002618" style="" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=57f771af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNiaAoOaDoLv9cyBeaoqUQ0gfGPLuszhYnhiaXDZnJDk5lJqAjx7COwUdlnBSBIicjrznmgebEnms5Ix4Gziax50mPnPN6iaD8TWLiaQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></span></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">理论上我们应该连的上，所以对这个网卡进行抓包，发现完全没游戏的数据包进来（游戏数据包是UPD，这里只有ICMP,是测延迟用的）</span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002621" style="" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=88aed00f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMZgtogjDDSRd8ORvp6AFmMibVgWJKB6p1sOd17nibtSjGiaZGus2dOicB8XOP5p7rP7cTiaKPaqTuiaW4CenXlQaDXb8KeVWs2QzhM4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></span></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">传统游戏的局域网联机逻辑是，游戏对所有网卡的0.0.0.0 发一个UDP广播包，255.255.255.255 这个包会在整个局域网进行广播，然后如果有客户端就会 回包。</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">这个游戏确实监听了UDP端口，并且等待广播包</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002622" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=afe5e496&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMlQichwXBI0vS8Yna9SZK1f883YQ01oRhrfntkKN3Dd3aOescakoibyjeSaDoof0yvuPib2Vg8SPfITnEYjMfkFLWicwHy9dpARHo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">所以 问题很明显，游戏并没有对这个网卡发包。打开procmon，我们看看游戏发了什么包:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002624" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=68311f42&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM0Z55y7ud20axTpZ0Mk9Djt7lGjXzUOicib0RSAFqfY6LF9tAjt2LcIY3x1DWUdRUudiarCUJkGHDLXyt7YoEMNhYT9ENrvCicNHc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">我们可以看到，这个是第一个问题，这个游戏广播的包是我的物理网卡地址，并不是TUN的卡的地址。那肯定是没有人回复的。</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">这个问题很好解决，根据我多年的</span></span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">零信任开发经验</span></strong><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">，游戏应该是通过一个叫做 越点 的机制去判断当前可用网卡的，我们只需要把虚拟网卡的越点设置为1就行</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002626" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=528edf94&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPm1SEWY1sFg2JmjfxH4NPCbeKCHmxHSWcztbROewlf9RxkdNE2gKYDJLUYoUIQCRObrI5I7JAicntAs8hiaJ3fl5slDibUXTYQPA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">这样游戏就会优先考虑虚拟网卡的IP发包。</span></span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">但是依然连不上</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">再次抓包，发现：</span></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002628" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=26670566&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMU3MO8icMcp75F4xVibCM9ico7BSqBO1OIlnYKdcYMDBbzHuLCGic6Ow1EC7qGrqsBxzztNflFbs20m2bZsLxF1Klv0knnQHE29eE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">解读一下，游戏的广播包服务端确实返回了回复了，我的客户端也即将链接，但是我的客户端莫名其妙的链到了25.16.24.136这个完全摸不着头脑的国外地址！ 按理说应该直接链接10.100.239.2这个我的朋友的虚拟网卡IP的</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">经过一段时间的摸索，我发现，这个25.16.245.136是我朋友的一个虚拟网卡的IP地址，说明： 游戏服务端收到信息了，但是回复的网卡IP错误！理论上，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">应该回复他的当前包过来的绑定的IP</span></strong><span leaf="">但是为什么会回复这个，不知道。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">临时解决方法是，禁用这个虚拟网卡，祈祷游戏能找到真的地址</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">禁用虚拟网卡后，我们发现更完蛋了，游戏服务端返回的是电脑的物理网卡地址</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002627" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=794cb788&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMJon3yovvlSPZUOfTDUqYnwDVTQBEFVkKgRhCFeaRrHIhkOQPPpMfico59MCFuY7ZI5HVfbDhCBRR1DnU85Wr9pxhxRg8W4icibc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/> </span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个是不可能通的，除非开零信任。零信任这个时候确实派上用场了。但是肯定不能为了一个游戏装这玩意。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">因此有必要去代码层看看了</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;" data-pm-slice="0 0 []"><span leaf="">深入代码层</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">让我们直接逆向这个游戏，看看为什么会这样吧拖入IDA，对sento打断点，连接游戏看看：</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">构造255.255.255.255的包</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002631" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=130d3599&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM3JibdVBpBMPybHTMHQWH11Ga0nBqhINvtSlQS7F5rERKFPbp8Ww8eUiaUPjDZbCiaYGRXyFJZicQpfZrdgP2MQGKAchKeZLC9LXs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">发送:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002630" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9536edd5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVOtJ5lPCCz6t3iakiapSic6SZt084DjjrQxUovXib4YvYGSgjxkGQMxiawtrjJPheEib8OJg3QjicVo7BicTL9q4NwxSiaeRAwT4GOLeuCQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">可以看到，发送的socket是一个socket，而不是枚举网卡逐个发送</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002632" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=57b3d9f5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVN0xjyhnxdibpOiaZeSRI302NhIm1HvefC0m46gKyjcVJ43hdFEIewky37DcenGMjnE8UU7jTaxPNViae2WkfvdWpspIKcn3TEBCI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">这就导致了第一个问题，广播包没广播对网卡</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">对于第二个问题，我们抓一个包看看：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">游戏服务器会返回一个包里面带了游戏服务端的IP地址</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002633" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=39a873a1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPpkYzb7FMI58VyjoicRHoP3WyRuCeYmU6jWcgUr4mib9SWxDiaHicOG1CZJGkxPMVj9DEKE5oZDAccT1owHEYyU2yjJoW8uYBD4c8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这一段是服务端的IP地址：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002629" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ef3de2f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOzVul9QrFNgCltcTCeAE5L47XQDfagWx2yHVx2kgETvKMt2dqPKdyMTiazRa86WcIZAImnWVKfOibospr0WCjtQL2cOK2T91FCw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这个IP地址很明显也是错误的</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">根据服务端代码，问题出在得到网卡地址的这里，服务端收到包是能知道哪个socket的，但是他的网络和引擎层不是一个socket，他的网络层是获取不到的，所以他就只能，取一个本机 IP 发出去….毕竟，2013年的时候哪有那么复杂的网卡局域网联机环境？</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002634" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=899c4a66&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNSADKVibdDQgia3ZQ7TdcRQUTOOZHuZFTznZEF8FU5ic7ItFeRegh6F2EXblCRCzHBGy6jlCjibZEQ07xhSMcH760ia5kRuel6DKtw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">而这个IP就是纯随机的来源。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span leaf="">修复这个bug</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">我们有几个修复方案，比如改包把IP改成自己的，起一个假的转发代理服务器等。但是最直接的办法是hook，我跟朋友写了两个方案，我的方案是客户端的方案，朋友的是服务端方案</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">客户端方案：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">通过hook sockets,进行改包,我用的是minihook:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-a4i93v" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &#34;pch.h&#34;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-3avwbk" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;cstdio&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-b3h1md" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;cstdarg&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-gf8do3" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;cstdint&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-eyadc0" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;cstring&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-kx7enm" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;vector&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-0orekj" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;string&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-cixpc1" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &#34;MinHook/include/MinHook.h&#34;</span><br/><span leaf="">namespace {</span><br/><span leaf="">using sendto_t = int(WINAPI*)(SOCKET, const char*, int, int, const sockaddr*,</span><br/><span leaf="">                              int);</span><br/><span leaf="">using recvfrom_t = int(WINAPI*)(SOCKET, char*, int, int, sockaddr*, int*);</span><br/><span leaf="">using bind_t = int(WINAPI*)(SOCKET, const sockaddr*, int);</span><br/><span leaf="">using getsockname_t = int(WINAPI*)(SOCKET, sockaddr*, int*);</span><br/><span leaf="">using gethostname_t = int(WINAPI*)(char*, int);</span><br/><span leaf="">using gethostbyname_t = hostent*(WINAPI*)(const char*);</span><br/><span leaf="">sendto_t RealSendTo = nullptr;</span><br/><span leaf="">recvfrom_t RealRecvFrom = nullptr;</span><br/><span leaf="">bind_t RealBind = nullptr;</span><br/><span leaf="">getsockname_t RealGetSockName = nullptr;</span><br/><span leaf="">gethostname_t RealGetHostName = nullptr;</span><br/><span leaf="">gethostbyname_t RealGetHostByName = nullptr;</span><br/><span leaf="">HMODULE g_Module = nullptr;</span><br/><span leaf="">HANDLE g_WorkerThread = nullptr;</span><br/><span leaf="">volatile bool g_Running = true;</span><br/><span leaf="">bool g_LogPackets = true;</span><br/><span leaf="">bool g_FixPayload = false;</span><br/><span leaf="">uint32_t g_ForcedIp = 0;</span><br/><span leaf="">std::vector&lt;uint32_t&gt; g_LocalIps;</span><br/><span leaf="">CRITICAL_SECTION g_LogLock;</span><br/><span leaf="">uint32_t ReadBe32(const char* p) {</span><br/><span leaf="">    return (uint32_t(uint8_t(p[0])) &lt;&lt; 24) | (uint32_t(uint8_t(p[1])) &lt;&lt; 16) |</span><br/><span leaf="">           (uint32_t(uint8_t(p[2])) &lt;&lt; 8) | uint32_t(uint8_t(p[3]));</span><br/><span leaf="">}</span><br/><span leaf="">void WriteBe32(char* p, uint32_t ip) {</span><br/><span leaf="">    p[0] = char((ip &gt;&gt; 24) &amp; 0xff);</span><br/><span leaf="">    p[1] = char((ip &gt;&gt; 16) &amp; 0xff);</span><br/><span leaf="">    p[2] = char((ip &gt;&gt; 8) &amp; 0xff);</span><br/><span leaf="">    p[3] = char(ip &amp; 0xff);</span><br/><span leaf="">}</span><br/><span leaf="">std::string IpToString(uint32_t ip) {</span><br/><span leaf="">    char buf[32];</span><br/><span leaf="">    std::snprintf(buf, sizeof(buf), &#34;%u.%u.%u.%u&#34;, (ip &gt;&gt; 24) &amp; 0xff,</span><br/><span leaf="">                  (ip &gt;&gt; 16) &amp; 0xff, (ip &gt;&gt; 8) &amp; 0xff, ip &amp; 0xff);</span><br/><span leaf="">    return buf;</span><br/><span leaf="">}</span><br/><span leaf="">uint32_t SockAddrIp(const sockaddr* addr) {</span><br/><span leaf="">    if (!addr || addr-&gt;sa_family != AF_INET) {</span><br/><span leaf="">        return 0;</span><br/><span leaf="">    }</span><br/><span leaf="">    const sockaddr_in* in = reinterpret_cast&lt;const sockaddr_in*&gt;(addr);</span><br/><span leaf="">    return ntohl(in-&gt;sin_addr.s_addr);</span><br/><span leaf="">}</span><br/><span leaf="">uint16_t SockAddrPort(const sockaddr* addr) {</span><br/><span leaf="">    if (!addr || addr-&gt;sa_family != AF_INET) {</span><br/><span leaf="">        return 0;</span><br/><span leaf="">    }</span><br/><span leaf="">    const sockaddr_in* in = reinterpret_cast&lt;const sockaddr_in*&gt;(addr);</span><br/><span leaf="">    return ntohs(in-&gt;sin_port);</span><br/><span leaf="">}</span><br/><span leaf="">void Log(const char* fmt, ...) {</span><br/><span leaf="">    EnterCriticalSection(&amp;g_LogLock);</span><br/><span leaf="">    va_list args;</span><br/><span leaf="">    va_start(args, fmt);</span><br/><span leaf="">    std::vprintf(fmt, args);</span><br/><span leaf="">    va_end(args);</span><br/><span leaf="">    std::printf(&#34;\n&#34;);</span><br/><span leaf="">    std::fflush(stdout);</span><br/><span leaf="">    LeaveCriticalSection(&amp;g_LogLock);</span><br/><span leaf="">}</span><br/><span leaf="">bool IsInterestingPacket(const char* buf, int len) {</span><br/><span leaf="">    if (!buf || len &lt;= 0) {</span><br/><span leaf="">        return false;</span><br/><span leaf="">    }</span><br/><span leaf="">    if (len &gt;= 2 &amp;&amp; buf[0] == &#39;U&#39; &amp;&amp;</span><br/><span leaf="">        (buf[1] == &#39;D&#39; || buf[1] == &#39;C&#39; || buf[1] == &#39;F&#39;)) {</span><br/><span leaf="">        return true;</span><br/><span leaf="">    }</span><br/><span leaf="">    if (len &gt;= 2 &amp;&amp; buf[0] == &#39;N&#39; &amp;&amp; buf[1] == &#39;F&#39;) {</span><br/><span leaf="">        return true;</span><br/><span leaf="">    }</span><br/><span leaf="">    if (len &gt; 200) {</span><br/><span leaf="">        return true;</span><br/><span leaf="">    }</span><br/><span leaf="">    return false;</span><br/><span leaf="">}</span><br/><span leaf="">bool LooksLikeUsefulIp(uint32_t ip) {</span><br/><span leaf="">    const uint8_t a = uint8_t((ip &gt;&gt; 24) &amp; 0xff);</span><br/><span leaf="">    const uint8_t b = uint8_t((ip &gt;&gt; 16) &amp; 0xff);</span><br/><span leaf="">    if (ip == 0 || ip == 0xffffffff || a == 0 || a == 127 || a &gt;= 224) {</span><br/><span leaf="">        return false;</span><br/><span leaf="">    }</span><br/><span leaf="">    if (a == 10 || a == 25 || (a == 172 &amp;&amp; b &gt;= 16 &amp;&amp; b &lt;= 31) ||</span><br/><span leaf="">        (a == 192 &amp;&amp; b == 168)) {</span><br/><span leaf="">        return true;</span><br/><span leaf="">    }</span><br/><span leaf="">    return false;</span><br/><span leaf="">}</span><br/><span leaf="">void ScanPayloadIps(const char* tag, const char* buf, int len) {</span><br/><span leaf="">    if (!buf || len &lt; 4) {</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span><br/><span leaf="">    int shown = 0;</span><br/><span leaf="">    for (int i = 0; i &lt;= len - 4; ++i) {</span><br/><span leaf="">        const uint32_t be = ReadBe32(buf + i);</span><br/><span leaf="">        if (LooksLikeUsefulIp(be)) {</span><br/><span leaf="">            if (shown == 0) {</span><br/><span leaf="">                std::printf(&#34;%s candidate IPs:&#34;, tag);</span><br/><span leaf="">            }</span><br/><span leaf="">            std::printf(&#34; +0x%X=%s&#34;, i, IpToString(be).c_str());</span><br/><span leaf="">            ++shown;</span><br/><span leaf="">            if (shown &gt;= 12) {</span><br/><span leaf="">                std::printf(&#34; ...&#34;);</span><br/><span leaf="">                break;</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    if (shown &gt; 0) {</span><br/><span leaf="">        std::printf(&#34;\n&#34;);</span><br/><span leaf="">    }</span><br/><span leaf="">}</span><br/><span leaf="">void DumpPacketPrefix(const char* tag, const char* buf, int len) {</span><br/><span leaf="">    if (!buf || len &lt;= 0) {</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span><br/><span leaf="">    const int count = len &lt; 64 ? len : 64;</span><br/><span leaf="">    std::printf(&#34;%s first %d:&#34;, tag, count);</span><br/><span leaf="">    for (int i = 0; i &lt; count; ++i) {</span><br/><span leaf="">        std::printf(&#34; %02X&#34;, uint8_t(buf[i]));</span><br/><span leaf="">    }</span><br/><span leaf="">    std::printf(&#34;\n&#34;);</span><br/><span leaf="">}</span><br/><span leaf="">void AddLocalIp(uint32_t ip) {</span><br/><span leaf="">    if (ip == 0 || ip == 0x7f000001) {</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span><br/><span leaf="">    for (uint32_t existing : g_LocalIps) {</span><br/><span leaf="">        if (existing == ip) {</span><br/><span leaf="">            return;</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    g_LocalIps.push_back(ip);</span><br/><span leaf="">}</span><br/><span leaf="">void RefreshLocalIps() {</span><br/><span leaf="">    g_LocalIps.clear();</span><br/><span leaf="">    HMODULE wsock32 = GetModuleHandleW(L&#34;WSOCK32.dll&#34;);</span><br/><span leaf="">    if (!wsock32) {</span><br/><span leaf="">        wsock32 = LoadLibraryW(L&#34;WSOCK32.dll&#34;);</span><br/><span leaf="">    }</span><br/><span leaf="">    auto realGetHostName =</span><br/><span leaf="">        reinterpret_cast&lt;gethostname_t&gt;(GetProcAddress(wsock32, &#34;gethostname&#34;));</span><br/><span leaf="">    auto realGetHostByName = reinterpret_cast&lt;gethostbyname_t&gt;(</span><br/><span leaf="">        GetProcAddress(wsock32, &#34;gethostbyname&#34;));</span><br/><span leaf="">    char name[256] = {};</span><br/><span leaf="">    if (realGetHostName &amp;&amp; realGetHostByName &amp;&amp;</span><br/><span leaf="">        realGetHostName(name, sizeof(name)) == 0) {</span><br/><span leaf="">        hostent* host = realGetHostByName(name);</span><br/><span leaf="">        if (host &amp;&amp; host-&gt;h_addrtype == AF_INET) {</span><br/><span leaf="">            for (char** addr = host-&gt;h_addr_list; addr &amp;&amp; *addr; ++addr) {</span><br/><span leaf="">                AddLocalIp(ntohl(*reinterpret_cast&lt;uint32_t*&gt;(*addr)));</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">}</span><br/><span leaf="">int ReplaceIpsInPayload(char* buf, int len, uint32_t replacement) {</span><br/><span leaf="">    if (!buf || len &lt; 4 || replacement == 0) {</span><br/><span leaf="">        return 0;</span><br/><span leaf="">    }</span><br/><span leaf="">    int replaced = 0;</span><br/><span leaf="">    for (int i = 0; i &lt;= len - 4; ++i) {</span><br/><span leaf="">        const uint32_t value = ReadBe32(buf + i);</span><br/><span leaf="">        for (uint32_t localIp : g_LocalIps) {</span><br/><span leaf="">            if (value == localIp &amp;&amp; value != replacement) {</span><br/><span leaf="">                WriteBe32(buf + i, replacement);</span><br/><span leaf="">                ++replaced;</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    return replaced;</span><br/><span leaf="">}</span><br/><span leaf="">int WINAPI HookSendTo(SOCKET s, const char* buf, int len, int flags,</span><br/><span leaf="">                      const sockaddr* to, int tolen) {</span><br/><span leaf="">    const uint32_t toIp = SockAddrIp(to);</span><br/><span leaf="">    const uint16_t toPort = SockAddrPort(to);</span><br/><span leaf="">    if (g_LogPackets &amp;&amp; IsInterestingPacket(buf, len)) {</span><br/><span leaf="">        Log(&#34;sendto s=%p to=%s:%u len=%d&#34;, reinterpret_cast&lt;void*&gt;(s),</span><br/><span leaf="">            IpToString(toIp).c_str(), toPort, len);</span><br/><span leaf="">        DumpPacketPrefix(&#34;  send&#34;, buf, len);</span><br/><span leaf="">        ScanPayloadIps(&#34;  send&#34;, buf, len);</span><br/><span leaf="">    }</span><br/><span leaf="">    if (g_FixPayload &amp;&amp; g_ForcedIp &amp;&amp; buf &amp;&amp; len &gt; 0) {</span><br/><span leaf="">        std::vector&lt;char&gt; copy(buf, buf + len);</span><br/><span leaf="">        const int changed = ReplaceIpsInPayload(copy.data(), len, g_ForcedIp);</span><br/><span leaf="">        if (changed &gt; 0) {</span><br/><span leaf="">            Log(&#34;sendto fixed %d payload IP(s) -&gt; %s&#34;, changed,</span><br/><span leaf="">                IpToString(g_ForcedIp).c_str());</span><br/><span leaf="">            return RealSendTo(s, copy.data(), len, flags, to, tolen);</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    return RealSendTo(s, buf, len, flags, to, tolen);</span><br/><span leaf="">}</span><br/><span leaf="">int WINAPI HookRecvFrom(SOCKET s, char* buf, int len, int flags, sockaddr* from,</span><br/><span leaf="">                        int* fromlen) {</span><br/><span leaf="">    const int ret = RealRecvFrom(s, buf, len, flags, from, fromlen);</span><br/><span leaf="">    if (ret &lt;= 0) {</span><br/><span leaf="">        return ret;</span><br/><span leaf="">    }</span><br/><span leaf="">    const uint32_t fromIp = SockAddrIp(from);</span><br/><span leaf="">    const uint16_t fromPort = SockAddrPort(from);</span><br/><span leaf="">    if (g_FixPayload &amp;&amp; fromIp) {</span><br/><span leaf="">        const int changed = ReplaceIpsInPayload(buf, ret, fromIp);</span><br/><span leaf="">        if (changed &gt; 0) {</span><br/><span leaf="">            Log(&#34;recvfrom fixed %d payload IP(s) -&gt; packet source %s&#34;, changed,</span><br/><span leaf="">                IpToString(fromIp).c_str());</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    if (g_LogPackets &amp;&amp; IsInterestingPacket(buf, ret)) {</span><br/><span leaf="">        Log(&#34;recvfrom s=%p from=%s:%u len=%d&#34;, reinterpret_cast&lt;void*&gt;(s),</span><br/><span leaf="">            IpToString(fromIp).c_str(), fromPort, ret);</span><br/><span leaf="">        DumpPacketPrefix(&#34;  recv&#34;, buf, ret);</span><br/><span leaf="">        ScanPayloadIps(&#34;  recv&#34;, buf, ret);</span><br/><span leaf="">    }</span><br/><span leaf="">    return ret;</span><br/><span leaf="">}</span><br/><span leaf="">int WINAPI HookBind(SOCKET s, const sockaddr* name, int namelen) {</span><br/><span leaf="">    const uint32_t ip = SockAddrIp(name);</span><br/><span leaf="">    AddLocalIp(ip);</span><br/><span leaf="">    Log(&#34;bind s=%p local=%s:%u&#34;, reinterpret_cast&lt;void*&gt;(s),</span><br/><span leaf="">        IpToString(ip).c_str(), SockAddrPort(name));</span><br/><span leaf="">    return RealBind(s, name, namelen);</span><br/><span leaf="">}</span><br/><span leaf="">int WINAPI HookGetSockName(SOCKET s, sockaddr* name, int* namelen) {</span><br/><span leaf="">    const int ret = RealGetSockName(s, name, namelen);</span><br/><span leaf="">    if (ret == 0) {</span><br/><span leaf="">        const uint32_t ip = SockAddrIp(name);</span><br/><span leaf="">        AddLocalIp(ip);</span><br/><span leaf="">        Log(&#34;getsockname s=%p local=%s:%u&#34;, reinterpret_cast&lt;void*&gt;(s),</span><br/><span leaf="">            IpToString(ip).c_str(), SockAddrPort(name));</span><br/><span leaf="">    }</span><br/><span leaf="">    return ret;</span><br/><span leaf="">}</span><br/><span leaf="">int WINAPI HookGetHostName(char* name, int namelen) {</span><br/><span leaf="">    const int ret = RealGetHostName(name, namelen);</span><br/><span leaf="">    if (ret == 0) {</span><br/><span leaf="">        Log(&#34;gethostname -&gt; %s&#34;, name);</span><br/><span leaf="">    }</span><br/><span leaf="">    return ret;</span><br/><span leaf="">}</span><br/><span leaf="">hostent* WINAPI HookGetHostByName(const char* name) {</span><br/><span leaf="">    hostent* ret = RealGetHostByName(name);</span><br/><span leaf="">    if (ret) {</span><br/><span leaf="">        std::printf(&#34;gethostbyname %s -&gt;&#34;, name ? name : &#34;&lt;null&gt;&#34;);</span><br/><span leaf="">        if (ret-&gt;h_addrtype == AF_INET) {</span><br/><span leaf="">            for (char** addr = ret-&gt;h_addr_list; addr &amp;&amp; *addr; ++addr) {</span><br/><span leaf="">                const uint32_t ip = ntohl(*reinterpret_cast&lt;uint32_t*&gt;(*addr));</span><br/><span leaf="">                AddLocalIp(ip);</span><br/><span leaf="">                std::printf(&#34; %s&#34;, IpToString(ip).c_str());</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">        std::printf(&#34;\n&#34;);</span><br/><span leaf="">    }</span><br/><span leaf="">    return ret;</span><br/><span leaf="">}</span><br/><span leaf="">bool HookExport(HMODULE module, const char* name, void* hook, void** original) {</span><br/><span leaf="">    void* target = reinterpret_cast&lt;void*&gt;(GetProcAddress(module, name));</span><br/><span leaf="">    if (!target) {</span><br/><span leaf="">        Log(&#34;missing export: %s&#34;, name);</span><br/><span leaf="">        return false;</span><br/><span leaf="">    }</span><br/><span leaf="">    MH_STATUS status = MH_CreateHook(target, hook, original);</span><br/><span leaf="">    if (status != MH_OK &amp;&amp; status != MH_ERROR_ALREADY_CREATED) {</span><br/><span leaf="">        Log(&#34;MH_CreateHook(%s) failed: %d&#34;, name, status);</span><br/><span leaf="">        return false;</span><br/><span leaf="">    }</span><br/><span leaf="">    status = MH_EnableHook(target);</span><br/><span leaf="">    if (status != MH_OK &amp;&amp; status != MH_ERROR_ENABLED) {</span><br/><span leaf="">        Log(&#34;MH_EnableHook(%s) failed: %d&#34;, name, status);</span><br/><span leaf="">        return false;</span><br/><span leaf="">    }</span><br/><span leaf="">    Log(&#34;hooked %s at %p&#34;, name, target);</span><br/><span leaf="">    return true;</span><br/><span leaf="">}</span><br/><span leaf="">uint32_t ParseIp(const char* text) {</span><br/><span leaf="">    unsigned int a = 0, b = 0, c = 0, d = 0;</span><br/><span leaf="">    if (sscanf_s(text, &#34;%u.%u.%u.%u&#34;, &amp;a, &amp;b, &amp;c, &amp;d) != 4) {</span><br/><span leaf="">        return 0;</span><br/><span leaf="">    }</span><br/><span leaf="">    if (a &gt; 255 || b &gt; 255 || c &gt; 255 || d &gt; 255) {</span><br/><span leaf="">        return 0;</span><br/><span leaf="">    }</span><br/><span leaf="">    return (a &lt;&lt; 24) | (b &lt;&lt; 16) | (c &lt;&lt; 8) | d;</span><br/><span leaf="">}</span><br/><span leaf="">void PrintHelp() {</span><br/><span leaf="">    Log(&#34;commands:&#34;);</span><br/><span leaf="">    Log(&#34;  help             show commands&#34;);</span><br/><span leaf="">    Log(&#34;  log on|off       enable or disable packet logs&#34;);</span><br/><span leaf="">    Log(&#34;  fix on|off       replace payload local IPs, default off&#34;);</span><br/><span leaf="">    Log(&#34;  ip a.b.c.d       force replacement IP for outgoing sendto&#34;);</span><br/><span leaf="">    Log(&#34;  local a.b.c.d    add an IP that should be replaced&#34;);</span><br/><span leaf="">    Log(&#34;  ips              show local IPs detected by gethostbyname&#34;);</span><br/><span leaf="">    Log(&#34;  refresh          refresh local IP list&#34;);</span><br/><span leaf="">    Log(&#34;  quit             unhook and unload DLL&#34;);</span><br/><span leaf="">}</span><br/><span leaf="">void CommandLoop() {</span><br/><span leaf="">    PrintHelp();</span><br/><span leaf="">    char line[256] = {};</span><br/><span leaf="">    while (g_Running &amp;&amp; std::fgets(line, sizeof(line), stdin)) {</span><br/><span leaf="">        line[strcspn(line, &#34;\r\n&#34;)] = 0;</span><br/><span leaf="">        if (_stricmp(line, &#34;help&#34;) == 0) {</span><br/><span leaf="">            PrintHelp();</span><br/><span leaf="">        } else if (_stricmp(line, &#34;log on&#34;) == 0) {</span><br/><span leaf="">            g_LogPackets = true;</span><br/><span leaf="">            Log(&#34;log on&#34;);</span><br/><span leaf="">        } else if (_stricmp(line, &#34;log off&#34;) == 0) {</span><br/><span leaf="">            g_LogPackets = false;</span><br/><span leaf="">            Log(&#34;log off&#34;);</span><br/><span leaf="">        } else if (_stricmp(line, &#34;fix on&#34;) == 0) {</span><br/><span leaf="">            g_FixPayload = true;</span><br/><span leaf="">            Log(&#34;fix on&#34;);</span><br/><span leaf="">        } else if (_stricmp(line, &#34;fix off&#34;) == 0) {</span><br/><span leaf="">            g_FixPayload = false;</span><br/><span leaf="">            Log(&#34;fix off&#34;);</span><br/><span leaf="">        } else if (_strnicmp(line, &#34;ip &#34;, 3) == 0) {</span><br/><span leaf="">            const uint32_t ip = ParseIp(line + 3);</span><br/><span leaf="">            if (ip) {</span><br/><span leaf="">                g_ForcedIp = ip;</span><br/><span leaf="">                Log(&#34;forced IP = %s&#34;, IpToString(g_ForcedIp).c_str());</span><br/><span leaf="">            } else {</span><br/><span leaf="">                Log(&#34;bad ip&#34;);</span><br/><span leaf="">            }</span><br/><span leaf="">        } else if (_strnicmp(line, &#34;local &#34;, 6) == 0) {</span><br/><span leaf="">            const uint32_t ip = ParseIp(line + 6);</span><br/><span leaf="">            if (ip) {</span><br/><span leaf="">                AddLocalIp(ip);</span><br/><span leaf="">                Log(&#34;added local/replace source IP = %s&#34;,</span><br/><span leaf="">                    IpToString(ip).c_str());</span><br/><span leaf="">            } else {</span><br/><span leaf="">                Log(&#34;bad ip&#34;);</span><br/><span leaf="">            }</span><br/><span leaf="">        } else if (_stricmp(line, &#34;ips&#34;) == 0) {</span><br/><span leaf="">            for (uint32_t ip : g_LocalIps) {</span><br/><span leaf="">                Log(&#34;local %s&#34;, IpToString(ip).c_str());</span><br/><span leaf="">            }</span><br/><span leaf="">        } else if (_stricmp(line, &#34;refresh&#34;) == 0) {</span><br/><span leaf="">            RefreshLocalIps();</span><br/><span leaf="">            Log(&#34;refreshed %u local IP(s)&#34;, unsigned(g_LocalIps.size()));</span><br/><span leaf="">        } else if (_stricmp(line, &#34;quit&#34;) == 0) {</span><br/><span leaf="">            g_Running = false;</span><br/><span leaf="">            break;</span><br/><span leaf="">        } else if (line[0]) {</span><br/><span leaf="">            Log(&#34;unknown command: %s&#34;, line);</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">}</span><br/><span leaf="">DWORD WINAPI WorkerThread(LPVOID) {</span><br/><span leaf="">    AllocConsole();</span><br/><span leaf="">    FILE* file = nullptr;</span><br/><span leaf="">    freopen_s(&amp;file, &#34;CONOUT$&#34;, &#34;w&#34;, stdout);</span><br/><span leaf="">    freopen_s(&amp;file, &#34;CONOUT$&#34;, &#34;w&#34;, stderr);</span><br/><span leaf="">    freopen_s(&amp;file, &#34;CONIN$&#34;, &#34;r&#34;, stdin);</span><br/><span leaf="">    SetConsoleTitleW(L&#34;ACM LAN hook&#34;);</span><br/><span leaf="">    Log(&#34;ACM LAN hook loaded&#34;);</span><br/><span leaf="">    RefreshLocalIps();</span><br/><span leaf="">    Log(&#34;local IP count: %u&#34;, unsigned(g_LocalIps.size()));</span><br/><span leaf="">    for (uint32_t ip : g_LocalIps) {</span><br/><span leaf="">        Log(&#34;local %s&#34;, IpToString(ip).c_str());</span><br/><span leaf="">    }</span><br/><span leaf="">    HMODULE wsock32 = GetModuleHandleW(L&#34;WSOCK32.dll&#34;);</span><br/><span leaf="">    if (!wsock32) {</span><br/><span leaf="">        wsock32 = LoadLibraryW(L&#34;WSOCK32.dll&#34;);</span><br/><span leaf="">    }</span><br/><span leaf="">    if (!wsock32) {</span><br/><span leaf="">        Log(&#34;failed to load WSOCK32.dll&#34;);</span><br/><span leaf="">        CommandLoop();</span><br/><span leaf="">    } else if (MH_Initialize() == MH_OK) {</span><br/><span leaf="">        HookExport(wsock32, &#34;sendto&#34;, HookSendTo,</span><br/><span leaf="">                   reinterpret_cast&lt;void**&gt;(&amp;RealSendTo));</span><br/><span leaf="">        HookExport(wsock32, &#34;recvfrom&#34;, HookRecvFrom,</span><br/><span leaf="">                   reinterpret_cast&lt;void**&gt;(&amp;RealRecvFrom));</span><br/><span leaf="">        HookExport(wsock32, &#34;bind&#34;, HookBind,</span><br/><span leaf="">                   reinterpret_cast&lt;void**&gt;(&amp;RealBind));</span><br/><span leaf="">        HookExport(wsock32, &#34;getsockname&#34;, HookGetSockName,</span><br/><span leaf="">                   reinterpret_cast&lt;void**&gt;(&amp;RealGetSockName));</span><br/><span leaf="">        HookExport(wsock32, &#34;gethostname&#34;, HookGetHostName,</span><br/><span leaf="">                   reinterpret_cast&lt;void**&gt;(&amp;RealGetHostName));</span><br/><span leaf="">        HookExport(wsock32, &#34;gethostbyname&#34;, HookGetHostByName,</span><br/><span leaf="">                   reinterpret_cast&lt;void**&gt;(&amp;RealGetHostByName));</span><br/><span leaf="">        CommandLoop();</span><br/><span leaf="">        MH_DisableHook(MH_ALL_HOOKS);</span><br/><span leaf="">        MH_Uninitialize();</span><br/><span leaf="">    } else {</span><br/><span leaf="">        Log(&#34;MH_Initialize failed&#34;);</span><br/><span leaf="">        CommandLoop();</span><br/><span leaf="">    }</span><br/><span leaf="">    Log(&#34;unloading&#34;);</span><br/><span leaf="">    FreeConsole();</span><br/><span leaf="">    FreeLibraryAndExitThread(g_Module, 0);</span><br/><span leaf="">    return 0;</span><br/><span leaf="">}</span><br/><span leaf="">}  // namespace</span><br/><span leaf="">BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call,</span><br/><span leaf="">                      LPVOID lpReserved) {</span><br/><span leaf="">    switch (ul_reason_for_call) {</span><br/><span leaf="">        case DLL_PROCESS_ATTACH:</span><br/><span leaf="">            g_Module = hModule;</span><br/><span leaf="">            DisableThreadLibraryCalls(hModule);</span><br/><span leaf="">            InitializeCriticalSection(&amp;g_LogLock);</span><br/><span leaf="">            g_WorkerThread =</span><br/><span leaf="">                CreateThread(nullptr, 0, WorkerThread, nullptr, 0, nullptr);</span><br/><span leaf="">            break;</span><br/><span leaf="">        case DLL_THREAD_ATTACH:</span><br/><span leaf="">        case DLL_THREAD_DETACH:</span><br/><span leaf="">            break;</span><br/><span leaf="">        case DLL_PROCESS_DETACH:</span><br/><span leaf="">            if (lpReserved == nullptr) {</span><br/><span leaf="">                g_Running = false;</span><br/><span leaf="">            }</span><br/><span leaf="">            DeleteCriticalSection(&amp;g_LogLock);</span><br/><span leaf="">            break;</span><br/><span leaf="">    }</span><br/><span leaf="">    return TRUE;</span><br/><span leaf="">}</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">关键点在这，把朋友广播过来的错误包改成正确的IP包</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    if (g_FixPayload &amp;&amp; g_ForcedIp &amp;&amp; buf &amp;&amp; len &gt; 0) {</span><br/><span leaf="">        std::vector&lt;char&gt; copy(buf, buf + len);</span><br/><span leaf="">        const int changed = ReplaceIpsInPayload(copy.data(), len, g_ForcedIp);</span><br/><span leaf="">        if (changed &gt; 0) {</span><br/><span leaf="">            Log(&#34;sendto fixed %d payload IP(s) -&gt; %s&#34;, changed,</span><br/><span leaf="">                IpToString(g_ForcedIp).c_str());</span><br/><span leaf="">            return RealSendTo(s, copy.data(), len, flags, to, tolen);</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">朋友的服务端的代码更粗暴，直接白加黑劫持游戏，把他的gethostbyname给hook了，从而发真的包给我</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">//</span><br/><span leaf="">// created by AheadLib</span><br/><span leaf="">// github:<a href="https://github.com/strivexjun/AheadLib-x86-x64" target="_blank">https://github.com/strivexjun/AheadLib-x86-x64</a></span><br/><span leaf="">//</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-z7jewz" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;windows.h&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-bbrkay" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;Shlwapi.h&gt;</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-mlnan8" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment( lib, &#34;Shlwapi.lib&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-acqamy" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:accept=_AheadLib_accept,@1&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-9faqok" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:bind=_AheadLib_bind,@2&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-ah077u" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:closesocket=_AheadLib_closesocket,@3&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-ht6m59" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:connect=_AheadLib_connect,@4&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-oficjp" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getpeername=_AheadLib_getpeername,@5&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-brr1jd" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getsockname=_AheadLib_getsockname,@6&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-7i7ua9" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getsockopt=_AheadLib_getsockopt,@7&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-hoz774" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:htonl=_AheadLib_htonl,@8&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-xaobd5" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:htons=_AheadLib_htons,@9&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-7lx9uw" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:inet_addr=_AheadLib_inet_addr,@10&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-lnuosp" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:inet_ntoa=_AheadLib_inet_ntoa,@11&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-4whkmm" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:ioctlsocket=_AheadLib_ioctlsocket,@12&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-dv78ka" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:listen=_AheadLib_listen,@13&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-ecwa6t" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:ntohl=_AheadLib_ntohl,@14&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-9kgmd1" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:ntohs=_AheadLib_ntohs,@15&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-jceamm" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:recv=_AheadLib_recv,@16&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-vei8rv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:recvfrom=_AheadLib_recvfrom,@17&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-8z1hyo" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:select=_AheadLib_select,@18&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-0deq9r" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:send=_AheadLib_send,@19&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-z9tf2k" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:sendto=_AheadLib_sendto,@20&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-ycxt2o" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:setsockopt=_AheadLib_setsockopt,@21&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-4z1jvv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:shutdown=_AheadLib_shutdown,@22&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-u91ijw" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:socket=_AheadLib_socket,@23&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-h21y4v" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:MigrateWinsockConfiguration=_AheadLib_MigrateWinsockConfiguration,@24&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-may13a" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:gethostbyaddr=_AheadLib_gethostbyaddr,@51&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-hmmp4z" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:gethostbyname=_AheadLib_gethostbyname,@52&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-uq10bd" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getprotobyname=_AheadLib_getprotobyname,@53&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-m0ltfb" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getprotobynumber=_AheadLib_getprotobynumber,@54&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-exfnhn" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getservbyname=_AheadLib_getservbyname,@55&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-7623oj" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getservbyport=_AheadLib_getservbyport,@56&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-z83qgl" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:gethostname=_AheadLib_gethostname,@57&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-38ql3o" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncSelect=_AheadLib_WSAAsyncSelect,@101&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-4tuzxl" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncGetHostByAddr=_AheadLib_WSAAsyncGetHostByAddr,@102&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-cnn2gf" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncGetHostByName=_AheadLib_WSAAsyncGetHostByName,@103&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-j5i77c" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncGetProtoByNumber=_AheadLib_WSAAsyncGetProtoByNumber,@104&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-6aduww" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncGetProtoByName=_AheadLib_WSAAsyncGetProtoByName,@105&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13r-o5dhev" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncGetServByPort=_AheadLib_WSAAsyncGetServByPort,@106&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-kq2r70" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAAsyncGetServByName=_AheadLib_WSAAsyncGetServByName,@107&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-3sma46" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSACancelAsyncRequest=_AheadLib_WSACancelAsyncRequest,@108&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-pfirg9" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSASetBlockingHook=_AheadLib_WSASetBlockingHook,@109&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-pj5ayr" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAUnhookBlockingHook=_AheadLib_WSAUnhookBlockingHook,@110&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-xcnxxh" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAGetLastError=_AheadLib_WSAGetLastError,@111&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-1gpfzu" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSASetLastError=_AheadLib_WSASetLastError,@112&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-x6kweu" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSACancelBlockingCall=_AheadLib_WSACancelBlockingCall,@113&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-j2r2e1" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAIsBlocking=_AheadLib_WSAIsBlocking,@114&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-6rnoa7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSAStartup=_AheadLib_WSAStartup,@115&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-9umc6p" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSACleanup=_AheadLib_WSACleanup,@116&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-6gmcea" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:__WSAFDIsSet=_AheadLib___WSAFDIsSet,@151&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-16610f" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WEP=_AheadLib_WEP,@500&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-gjosd3" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSApSetPostRoutine=_AheadLib_WSApSetPostRoutine,@1000&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-o7qcl9" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:inet_network=_AheadLib_inet_network,@1100&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-zlze2x" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:getnetbyname=_AheadLib_getnetbyname,@1101&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-ur0kn3" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:rcmd=_AheadLib_rcmd,@1102&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-4gkmkc" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:rexec=_AheadLib_rexec,@1103&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-r7i7oa" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:rresvport=_AheadLib_rresvport,@1104&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-je8vd5" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:sethostname=_AheadLib_sethostname,@1105&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-lj7rlb" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:dn_expand=_AheadLib_dn_expand,@1106&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-buka2r" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:WSARecvEx=_AheadLib_WSARecvEx,@1107&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-rrbg4w" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:s_perror=_AheadLib_s_perror,@1108&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-btbl16" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetAddressByNameA=_AheadLib_GetAddressByNameA,@1109&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-kd5pod" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetAddressByNameW=_AheadLib_GetAddressByNameW,@1110&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-b6jr0z" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:EnumProtocolsA=_AheadLib_EnumProtocolsA,@1111&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-djhtnt" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:EnumProtocolsW=_AheadLib_EnumProtocolsW,@1112&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-71vf47" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetTypeByNameA=_AheadLib_GetTypeByNameA,@1113&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-p8d33r" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetTypeByNameW=_AheadLib_GetTypeByNameW,@1114&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-od137p" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetNameByTypeA=_AheadLib_GetNameByTypeA,@1115&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-th86ty" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetNameByTypeW=_AheadLib_GetNameByTypeW,@1116&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-zqptwo" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:SetServiceA=_AheadLib_SetServiceA,@1117&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-4m2wrv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:SetServiceW=_AheadLib_SetServiceW,@1118&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-jx3vwf" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetServiceA=_AheadLib_GetServiceA,@1119&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-iotlgp" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetServiceW=_AheadLib_GetServiceW,@1120&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-pffrdg" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:NPLoadNameSpaces=_AheadLib_NPLoadNameSpaces,@1130&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-cwtwq9" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:TransmitFile=_AheadLib_TransmitFile,@1140&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-ey7u6e" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:AcceptEx=_AheadLib_AcceptEx,@1141&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-ixsmpv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pragma</a> comment(linker, &#34;/EXPORT:GetAcceptExSockaddrs=_AheadLib_GetAcceptExSockaddrs,@1142&#34;)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mpoca13s-pbzekd" style="color: #576B95 !important;" data-topic="1" data-recommend="">#include</a> &lt;string&gt;</span><br/><span leaf="">// --- ??核心 ---</span><br/><span leaf="">std::string GetTargetIPFromConfig() {</span><br/><span leaf="">    char szPath[MAX_PATH];</span><br/><span leaf="">    GetModuleFileNameA(NULL, szPath, MAX_PATH);</span><br/><span leaf="">    // 配置路?：与 exe 同目?的 hostip.config</span><br/><span leaf="">    std::string configPath = std::string(szPath).substr(0, std::string(szPath).find_last_of(&#34;\\/&#34;)) + &#34;\\hostip.config&#34;;</span><br/><span leaf="">    char szIP[64] = { 0 };</span><br/><span leaf="">    GetPrivateProfileStringA(&#34;Network&#34;, &#34;TargetIP&#34;, &#34;&#34;, szIP, sizeof(szIP), configPath.c_str());</span><br/><span leaf="">    return std::string(szIP);</span><br/><span leaf="">}</span><br/><span leaf="">extern PVOID pfnAheadLib_gethostbyname;</span><br/><span leaf="">// 核心 Hook 函?，使用 __stdcall 保??平衡</span><br/><span leaf="">extern &#34;C&#34; struct hostent* __stdcall My_gethostbyname_Hook(const char* name) {</span><br/><span leaf="">    // ?制?型??，使用全局?量 pfnAheadLib_gethostbyname</span><br/><span leaf="">    typedef struct hostent* (__stdcall *pfn_orig)(const char*);</span><br/><span leaf="">    pfn_orig pOrig = (pfn_orig)pfnAheadLib_gethostbyname;</span><br/><span leaf="">    struct hostent* pResult = pOrig(name);</span><br/><span leaf="">    std::string targetIP = GetTargetIPFromConfig();</span><br/><span leaf="">    if (!targetIP.empty()) {</span><br/><span leaf="">        unsigned long ip = inet_addr(targetIP.c_str());</span><br/><span leaf="">        if (ip != INADDR_NONE) {</span><br/><span leaf="">            if (pResult &amp;&amp; pResult-&gt;h_addrtype == AF_INET) {</span><br/><span leaf="">                // 原始请求成功，直接修改其缓存的 IP</span><br/><span leaf="">                *(unsigned long*)pResult-&gt;h_addr_list[0] = ip;</span><br/><span leaf="">            } else {</span><br/><span leaf="">                // 原始请求失败（如域名已失效），构造一个假的 hostent 结构体返回</span><br/><span leaf="">                static struct hostent fake_hostent;</span><br/><span leaf="">                static char* fake_aliases[] = { NULL };</span><br/><span leaf="">                static unsigned long fake_ip;</span><br/><span leaf="">                static char* fake_addr_list[] = { (char*)&amp;fake_ip, NULL };</span><br/><span leaf="">                static char fake_name[256];</span><br/><span leaf="">                fake_ip = ip;</span><br/><span leaf="">                if (name) {</span><br/><span leaf="">                    strncpy(fake_name, name, sizeof(fake_name) - 1);</span><br/><span leaf="">                    fake_name[sizeof(fake_name) - 1] = &#39;\0&#39;;</span><br/><span leaf="">                } else {</span><br/><span leaf="">                    fake_name[0] = &#39;\0&#39;;</span><br/><span leaf="">                }</span><br/><span leaf="">                fake_hostent.h_name = fake_name;</span><br/><span leaf="">                fake_hostent.h_aliases = fake_aliases;</span><br/><span leaf="">                fake_hostent.h_addrtype = AF_INET;</span><br/><span leaf="">                fake_hostent.h_length = 4;</span><br/><span leaf="">                fake_hostent.h_addr_list = fake_addr_list;</span><br/><span leaf="">                pResult = &amp;fake_hostent;</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    return pResult;</span><br/><span leaf="">}</span><br/><span leaf="">PVOID pfnAheadLib_accept;</span><br/><span leaf="">PVOID pfnAheadLib_bind;</span><br/><span leaf="">PVOID pfnAheadLib_closesocket;</span><br/><span leaf="">PVOID pfnAheadLib_connect;</span><br/><span leaf="">PVOID pfnAheadLib_getpeername;</span><br/><span leaf="">PVOID pfnAheadLib_getsockname;</span><br/><span leaf="">PVOID pfnAheadLib_getsockopt;</span><br/><span leaf="">PVOID pfnAheadLib_htonl;</span><br/><span leaf="">PVOID pfnAheadLib_htons;</span><br/><span leaf="">PVOID pfnAheadLib_inet_addr;</span><br/><span leaf="">PVOID pfnAheadLib_inet_ntoa;</span><br/><span leaf="">PVOID pfnAheadLib_ioctlsocket;</span><br/><span leaf="">PVOID pfnAheadLib_listen;</span><br/><span leaf="">PVOID pfnAheadLib_ntohl;</span><br/><span leaf="">PVOID pfnAheadLib_ntohs;</span><br/><span leaf="">PVOID pfnAheadLib_recv;</span><br/><span leaf="">PVOID pfnAheadLib_recvfrom;</span><br/><span leaf="">PVOID pfnAheadLib_select;</span><br/><span leaf="">PVOID pfnAheadLib_send;</span><br/><span leaf="">PVOID pfnAheadLib_sendto;</span><br/><span leaf="">PVOID pfnAheadLib_setsockopt;</span><br/><span leaf="">PVOID pfnAheadLib_shutdown;</span><br/><span leaf="">PVOID pfnAheadLib_socket;</span><br/><span leaf="">PVOID pfnAheadLib_MigrateWinsockConfiguration;</span><br/><span leaf="">PVOID pfnAheadLib_gethostbyaddr;</span><br/><span leaf="">PVOID pfnAheadLib_gethostbyname;</span><br/><span leaf="">PVOID pfnAheadLib_getprotobyname;</span><br/><span leaf="">PVOID pfnAheadLib_getprotobynumber;</span><br/><span leaf="">PVOID pfnAheadLib_getservbyname;</span><br/><span leaf="">PVOID pfnAheadLib_getservbyport;</span><br/><span leaf="">PVOID pfnAheadLib_gethostname;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncSelect;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncGetHostByAddr;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncGetHostByName;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncGetProtoByNumber;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncGetProtoByName;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncGetServByPort;</span><br/><span leaf="">PVOID pfnAheadLib_WSAAsyncGetServByName;</span><br/><span leaf="">PVOID pfnAheadLib_WSACancelAsyncRequest;</span><br/><span leaf="">PVOID pfnAheadLib_WSASetBlockingHook;</span><br/><span leaf="">PVOID pfnAheadLib_WSAUnhookBlockingHook;</span><br/><span leaf="">PVOID pfnAheadLib_WSAGetLastError;</span><br/><span leaf="">PVOID pfnAheadLib_WSASetLastError;</span><br/><span leaf="">PVOID pfnAheadLib_WSACancelBlockingCall;</span><br/><span leaf="">PVOID pfnAheadLib_WSAIsBlocking;</span><br/><span leaf="">PVOID pfnAheadLib_WSAStartup;</span><br/><span leaf="">PVOID pfnAheadLib_WSACleanup;</span><br/><span leaf="">PVOID pfnAheadLib___WSAFDIsSet;</span><br/><span leaf="">PVOID pfnAheadLib_WEP;</span><br/><span leaf="">PVOID pfnAheadLib_WSApSetPostRoutine;</span><br/><span leaf="">PVOID pfnAheadLib_inet_network;</span><br/><span leaf="">PVOID pfnAheadLib_getnetbyname;</span><br/><span leaf="">PVOID pfnAheadLib_rcmd;</span><br/><span leaf="">PVOID pfnAheadLib_rexec;</span><br/><span leaf="">PVOID pfnAheadLib_rresvport;</span><br/><span leaf="">PVOID pfnAheadLib_sethostname;</span><br/><span leaf="">PVOID pfnAheadLib_dn_expand;</span><br/><span leaf="">PVOID pfnAheadLib_WSARecvEx;</span><br/><span leaf="">PVOID pfnAheadLib_s_perror;</span><br/><span leaf="">PVOID pfnAheadLib_GetAddressByNameA;</span><br/><span leaf="">PVOID pfnAheadLib_GetAddressByNameW;</span><br/><span leaf="">PVOID pfnAheadLib_EnumProtocolsA;</span><br/><span leaf="">PVOID pfnAheadLib_EnumProtocolsW;</span><br/><span leaf="">PVOID pfnAheadLib_GetTypeByNameA;</span><br/><span leaf="">PVOID pfnAheadLib_GetTypeByNameW;</span><br/><span leaf="">PVOID pfnAheadLib_GetNameByTypeA;</span><br/><span leaf="">PVOID pfnAheadLib_GetNameByTypeW;</span><br/><span leaf="">PVOID pfnAheadLib_SetServiceA;</span><br/><span leaf="">PVOID pfnAheadLib_SetServiceW;</span><br/><span leaf="">PVOID pfnAheadLib_GetServiceA;</span><br/><span leaf="">PVOID pfnAheadLib_GetServiceW;</span><br/><span leaf="">PVOID pfnAheadLib_NPLoadNameSpaces;</span><br/><span leaf="">PVOID pfnAheadLib_TransmitFile;</span><br/><span leaf="">PVOID pfnAheadLib_AcceptEx;</span><br/><span leaf="">PVOID pfnAheadLib_GetAcceptExSockaddrs;</span><br/><span leaf="">static</span><br/><span leaf="">HMODULE g_OldModule = NULL;</span><br/><span leaf="">VOID WINAPI Free()</span><br/><span leaf="">{</span><br/><span leaf="">    if (g_OldModule)</span><br/><span leaf="">    {</span><br/><span leaf="">        FreeLibrary(g_OldModule);</span><br/><span leaf="">    }</span><br/><span leaf="">}</span><br/><span leaf="">BOOL WINAPI Load()</span><br/><span leaf="">{</span><br/><span leaf="">    TCHAR tzPath[MAX_PATH];</span><br/><span leaf="">    TCHAR tzTemp[MAX_PATH * 2];</span><br/><span leaf="">    //</span><br/><span leaf="">    // ?里是否?系?目?或?前目?加?原始DLL</span><br/><span leaf="">    //</span><br/><span leaf="">    //GetModuleFileName(NULL,tzPath,MAX_PATH); //?取本目?下的</span><br/><span leaf="">    //PathRemoveFileSpec(tzPath);</span><br/><span leaf="">    GetSystemDirectory(tzPath, MAX_PATH); //默??取系?目?的</span><br/><span leaf="">    lstrcat(tzPath, TEXT(&#34;\\wsock32.dll&#34;));</span><br/><span leaf="">    g_OldModule = LoadLibrary(tzPath);</span><br/><span leaf="">    if (g_OldModule == NULL)</span><br/><span leaf="">    {</span><br/><span leaf="">        wsprintf(tzTemp, TEXT(&#34;?法找到模? %s,程序?法正常?行&#34;), tzPath);</span><br/><span leaf="">        MessageBox(NULL, tzTemp, TEXT(&#34;AheadLib&#34;), MB_ICONSTOP);</span><br/><span leaf="">    }</span><br/><span leaf="">    return (g_OldModule != NULL);</span><br/><span leaf="">}</span><br/><span leaf="">FARPROC WINAPI GetAddress(PCSTR pszProcName)</span><br/><span leaf="">{</span><br/><span leaf="">    FARPROC fpAddress;</span><br/><span leaf="">    CHAR szProcName[64];</span><br/><span leaf="">    TCHAR tzTemp[MAX_PATH];</span><br/><span leaf="">    fpAddress = GetProcAddress(g_OldModule, pszProcName);</span><br/><span leaf="">    if (fpAddress == NULL)</span><br/><span leaf="">    {</span><br/><span leaf="">        if (HIWORD(pszProcName) == 0)</span><br/><span leaf="">        {</span><br/><span leaf="">            wsprintfA(szProcName, &#34;#%d&#34;, pszProcName);</span><br/><span leaf="">            pszProcName = szProcName;</span><br/><span leaf="">        }</span><br/><span leaf="">        wsprintf(tzTemp, TEXT(&#34;?法找到函? %hs,程序?法正常?行&#34;), pszProcName);</span><br/><span leaf="">        MessageBox(NULL, tzTemp, TEXT(&#34;AheadLib&#34;), MB_ICONSTOP);</span><br/><span leaf="">        ExitProcess(-2);</span><br/><span leaf="">    }</span><br/><span leaf="">    return fpAddress;</span><br/><span leaf="">}</span><br/><span leaf="">BOOL WINAPI Init()</span><br/><span leaf="">{</span><br/><span leaf="">    pfnAheadLib_accept = GetAddress(&#34;accept&#34;);</span><br/><span leaf="">    pfnAheadLib_bind = GetAddress(&#34;bind&#34;);</span><br/><span leaf="">    pfnAheadLib_closesocket = GetAddress(&#34;closesocket&#34;);</span><br/><span leaf="">    pfnAheadLib_connect = GetAddress(&#34;connect&#34;);</span><br/><span leaf="">    pfnAheadLib_getpeername = GetAddress(&#34;getpeername&#34;);</span><br/><span leaf="">    pfnAheadLib_getsockname = GetAddress(&#34;getsockname&#34;);</span><br/><span leaf="">    pfnAheadLib_getsockopt = GetAddress(&#34;getsockopt&#34;);</span><br/><span leaf="">    pfnAheadLib_htonl = GetAddress(&#34;htonl&#34;);</span><br/><span leaf="">    pfnAheadLib_htons = GetAddress(&#34;htons&#34;);</span><br/><span leaf="">    pfnAheadLib_inet_addr = GetAddress(&#34;inet_addr&#34;);</span><br/><span leaf="">    pfnAheadLib_inet_ntoa = GetAddress(&#34;inet_ntoa&#34;);</span><br/><span leaf="">    pfnAheadLib_ioctlsocket = GetAddress(&#34;ioctlsocket&#34;);</span><br/><span leaf="">    pfnAheadLib_listen = GetAddress(&#34;listen&#34;);</span><br/><span leaf="">    pfnAheadLib_ntohl = GetAddress(&#34;ntohl&#34;);</span><br/><span leaf="">    pfnAheadLib_ntohs = GetAddress(&#34;ntohs&#34;);</span><br/><span leaf="">    pfnAheadLib_recv = GetAddress(&#34;recv&#34;);</span><br/><span leaf="">    pfnAheadLib_recvfrom = GetAddress(&#34;recvfrom&#34;);</span><br/><span leaf="">    pfnAheadLib_select = GetAddress(&#34;select&#34;);</span><br/><span leaf="">    pfnAheadLib_send = GetAddress(&#34;send&#34;);</span><br/><span leaf="">    pfnAheadLib_sendto = GetAddress(&#34;sendto&#34;);</span><br/><span leaf="">    pfnAheadLib_setsockopt = GetAddress(&#34;setsockopt&#34;);</span><br/><span leaf="">    pfnAheadLib_shutdown = GetAddress(&#34;shutdown&#34;);</span><br/><span leaf="">    pfnAheadLib_socket = GetAddress(&#34;socket&#34;);</span><br/><span leaf="">    pfnAheadLib_MigrateWinsockConfiguration = GetAddress(&#34;MigrateWinsockConfiguration&#34;);</span><br/><span leaf="">    pfnAheadLib_gethostbyaddr = GetAddress(&#34;gethostbyaddr&#34;);</span><br/><span leaf="">    pfnAheadLib_gethostbyname = GetAddress(&#34;gethostbyname&#34;);</span><br/><span leaf="">    pfnAheadLib_getprotobyname = GetAddress(&#34;getprotobyname&#34;);</span><br/><span leaf="">    pfnAheadLib_getprotobynumber = GetAddress(&#34;getprotobynumber&#34;);</span><br/><span leaf="">    pfnAheadLib_getservbyname = GetAddress(&#34;getservbyname&#34;);</span><br/><span leaf="">    pfnAheadLib_getservbyport = GetAddress(&#34;getservbyport&#34;);</span><br/><span leaf="">    pfnAheadLib_gethostname = GetAddress(&#34;gethostname&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncSelect = GetAddress(&#34;WSAAsyncSelect&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncGetHostByAddr = GetAddress(&#34;WSAAsyncGetHostByAddr&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncGetHostByName = GetAddress(&#34;WSAAsyncGetHostByName&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncGetProtoByNumber = GetAddress(&#34;WSAAsyncGetProtoByNumber&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncGetProtoByName = GetAddress(&#34;WSAAsyncGetProtoByName&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncGetServByPort = GetAddress(&#34;WSAAsyncGetServByPort&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAAsyncGetServByName = GetAddress(&#34;WSAAsyncGetServByName&#34;);</span><br/><span leaf="">    pfnAheadLib_WSACancelAsyncRequest = GetAddress(&#34;WSACancelAsyncRequest&#34;);</span><br/><span leaf="">    pfnAheadLib_WSASetBlockingHook = GetAddress(&#34;WSASetBlockingHook&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAUnhookBlockingHook = GetAddress(&#34;WSAUnhookBlockingHook&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAGetLastError = GetAddress(&#34;WSAGetLastError&#34;);</span><br/><span leaf="">    pfnAheadLib_WSASetLastError = GetAddress(&#34;WSASetLastError&#34;);</span><br/><span leaf="">    pfnAheadLib_WSACancelBlockingCall = GetAddress(&#34;WSACancelBlockingCall&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAIsBlocking = GetAddress(&#34;WSAIsBlocking&#34;);</span><br/><span leaf="">    pfnAheadLib_WSAStartup = GetAddress(&#34;WSAStartup&#34;);</span><br/><span leaf="">    pfnAheadLib_WSACleanup = GetAddress(&#34;WSACleanup&#34;);</span><br/><span leaf="">    pfnAheadLib___WSAFDIsSet = GetAddress(&#34;__WSAFDIsSet&#34;);</span><br/><span leaf="">    pfnAheadLib_WEP = GetAddress(&#34;WEP&#34;);</span><br/><span leaf="">    pfnAheadLib_WSApSetPostRoutine = GetAddress(&#34;WSApSetPostRoutine&#34;);</span><br/><span leaf="">    pfnAheadLib_inet_network = GetAddress(&#34;inet_network&#34;);</span><br/><span leaf="">    pfnAheadLib_getnetbyname = GetAddress(&#34;getnetbyname&#34;);</span><br/><span leaf="">    pfnAheadLib_rcmd = GetAddress(&#34;rcmd&#34;);</span><br/><span leaf="">    pfnAheadLib_rexec = GetAddress(&#34;rexec&#34;);</span><br/><span leaf="">    pfnAheadLib_rresvport = GetAddress(&#34;rresvport&#34;);</span><br/><span leaf="">    pfnAheadLib_sethostname = GetAddress(&#34;sethostname&#34;);</span><br/><span leaf="">    pfnAheadLib_dn_expand = GetAddress(&#34;dn_expand&#34;);</span><br/><span leaf="">    pfnAheadLib_WSARecvEx = GetAddress(&#34;WSARecvEx&#34;);</span><br/><span leaf="">    pfnAheadLib_s_perror = GetAddress(&#34;s_perror&#34;);</span><br/><span leaf="">    pfnAheadLib_GetAddressByNameA = GetAddress(&#34;GetAddressByNameA&#34;);</span><br/><span leaf="">    pfnAheadLib_GetAddressByNameW = GetAddress(&#34;GetAddressByNameW&#34;);</span><br/><span leaf="">    pfnAheadLib_EnumProtocolsA = GetAddress(&#34;EnumProtocolsA&#34;);</span><br/><span leaf="">    pfnAheadLib_EnumProtocolsW = GetAddress(&#34;EnumProtocolsW&#34;);</span><br/><span leaf="">    pfnAheadLib_GetTypeByNameA = GetAddress(&#34;GetTypeByNameA&#34;);</span><br/><span leaf="">    pfnAheadLib_GetTypeByNameW = GetAddress(&#34;GetTypeByNameW&#34;);</span><br/><span leaf="">    pfnAheadLib_GetNameByTypeA = GetAddress(&#34;GetNameByTypeA&#34;);</span><br/><span leaf="">    pfnAheadLib_GetNameByTypeW = GetAddress(&#34;GetNameByTypeW&#34;);</span><br/><span leaf="">    pfnAheadLib_SetServiceA = GetAddress(&#34;SetServiceA&#34;);</span><br/><span leaf="">    pfnAheadLib_SetServiceW = GetAddress(&#34;SetServiceW&#34;);</span><br/><span leaf="">    pfnAheadLib_GetServiceA = GetAddress(&#34;GetServiceA&#34;);</span><br/><span leaf="">    pfnAheadLib_GetServiceW = GetAddress(&#34;GetServiceW&#34;);</span><br/><span leaf="">    pfnAheadLib_NPLoadNameSpaces = GetAddress(&#34;NPLoadNameSpaces&#34;);</span><br/><span leaf="">    pfnAheadLib_TransmitFile = GetAddress(&#34;TransmitFile&#34;);</span><br/><span leaf="">    pfnAheadLib_AcceptEx = GetAddress(&#34;AcceptEx&#34;);</span><br/><span leaf="">    pfnAheadLib_GetAcceptExSockaddrs = GetAddress(&#34;GetAcceptExSockaddrs&#34;);</span><br/><span leaf="">    return TRUE;</span><br/><span leaf="">}    </span><br/><span leaf="">DWORD WINAPI ThreadProc(LPVOID lpThreadParameter)</span><br/><span leaf="">{</span><br/><span leaf="">    HANDLE hProcess;</span><br/><span leaf="">    PVOID addr1 = reinterpret_cast&lt;PVOID&gt;(0x00401000);</span><br/><span leaf="">    BYTE data1[] = { 0x90, 0x90, 0x90, 0x90 };</span><br/><span leaf="">    //</span><br/><span leaf="">    // ??VMP3.x 的?存保?</span><br/><span leaf="">    //</span><br/><span leaf="">    hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, GetCurrentProcessId());</span><br/><span leaf="">    if (hProcess)</span><br/><span leaf="">    {</span><br/><span leaf="">        WriteProcessMemory(hProcess, addr1, data1, sizeof(data1), NULL);</span><br/><span leaf="">        CloseHandle(hProcess);</span><br/><span leaf="">    }</span><br/><span leaf="">    return 0;</span><br/><span leaf="">}</span><br/><span leaf="">BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)</span><br/><span leaf="">{</span><br/><span leaf="">    if (dwReason == DLL_PROCESS_ATTACH)</span><br/><span leaf="">    {</span><br/><span leaf="">        DisableThreadLibraryCalls(hModule);</span><br/><span leaf="">        if (Load() &amp;&amp; Init())</span><br/><span leaf="">        {</span><br/><span leaf="">            TCHAR szAppName[MAX_PATH] = TEXT(&#34;MyApp.exe&#34;);//?修改宿主?程名</span><br/><span leaf="">            TCHAR szCurName[MAX_PATH];</span><br/><span leaf="">            GetModuleFileName(NULL, szCurName, MAX_PATH);</span><br/><span leaf="">            PathStripPath(szCurName);</span><br/><span leaf="">            //是否判?宿主?程名</span><br/><span leaf="">            if (StrCmpI(szCurName, szAppName) == 0)</span><br/><span leaf="">            {</span><br/><span leaf="">                //???丁?程或者其他操作</span><br/><span leaf="">                HANDLE hThread = CreateThread(NULL, NULL, ThreadProc, NULL, NULL, NULL);</span><br/><span leaf="">                if (hThread)</span><br/><span leaf="">                {</span><br/><span leaf="">                    CloseHandle(hThread);</span><br/><span leaf="">                }</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    else if (dwReason == DLL_PROCESS_DETACH)</span><br/><span leaf="">    {</span><br/><span leaf="">        Free();</span><br/><span leaf="">    }</span><br/><span leaf="">    return TRUE;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_accept(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_accept;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_bind(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_bind;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_closesocket(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_closesocket;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_connect(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_connect;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getpeername(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getpeername;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getsockname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getsockname;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getsockopt(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getsockopt;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_htonl(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_htonl;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_htons(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_htons;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_inet_addr(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_inet_addr;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_inet_ntoa(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_inet_ntoa;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_ioctlsocket(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_ioctlsocket;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_listen(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_listen;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_ntohl(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_ntohl;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_ntohs(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_ntohs;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_recv(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_recv;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_recvfrom(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_recvfrom;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_select(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_select;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_send(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_send;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_sendto(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_sendto;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_setsockopt(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_setsockopt;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_shutdown(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_shutdown;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_socket(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_socket;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_MigrateWinsockConfiguration(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_MigrateWinsockConfiguration;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_gethostbyaddr(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_gethostbyaddr;</span><br/><span leaf="">}</span><br/><span leaf="">/*</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_gethostbyname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_gethostbyname;</span><br/><span leaf="">}</span><br/><span leaf="">*/</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getprotobyname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getprotobyname;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getprotobynumber(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getprotobynumber;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getservbyname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getservbyname;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getservbyport(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getservbyport;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_gethostname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_gethostname;</span><br/><span leaf="">}</span><br/><span leaf="">// 修改原本的 naked ??</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_gethostbyname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm {</span><br/><span leaf="">        push [esp+4]    // ?入??</span><br/><span leaf="">        call My_gethostbyname_Hook</span><br/><span leaf="">        ret 4           // 恢复?平衡</span><br/><span leaf="">    }</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncSelect(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncSelect;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncGetHostByAddr(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncGetHostByAddr;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncGetHostByName(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncGetHostByName;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncGetProtoByNumber(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncGetProtoByNumber;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncGetProtoByName(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncGetProtoByName;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncGetServByPort(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncGetServByPort;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAAsyncGetServByName(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAAsyncGetServByName;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSACancelAsyncRequest(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSACancelAsyncRequest;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSASetBlockingHook(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSASetBlockingHook;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAUnhookBlockingHook(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAUnhookBlockingHook;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAGetLastError(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAGetLastError;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSASetLastError(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSASetLastError;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSACancelBlockingCall(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSACancelBlockingCall;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAIsBlocking(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAIsBlocking;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSAStartup(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSAStartup;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSACleanup(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSACleanup;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib___WSAFDIsSet(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib___WSAFDIsSet;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WEP(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WEP;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSApSetPostRoutine(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSApSetPostRoutine;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_inet_network(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_inet_network;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_getnetbyname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_getnetbyname;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_rcmd(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_rcmd;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_rexec(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_rexec;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_rresvport(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_rresvport;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_sethostname(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_sethostname;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_dn_expand(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_dn_expand;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_WSARecvEx(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_WSARecvEx;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_s_perror(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_s_perror;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetAddressByNameA(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetAddressByNameA;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetAddressByNameW(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetAddressByNameW;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_EnumProtocolsA(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_EnumProtocolsA;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_EnumProtocolsW(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_EnumProtocolsW;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetTypeByNameA(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetTypeByNameA;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetTypeByNameW(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetTypeByNameW;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetNameByTypeA(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetNameByTypeA;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetNameByTypeW(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetNameByTypeW;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_SetServiceA(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_SetServiceA;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_SetServiceW(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_SetServiceW;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetServiceA(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetServiceA;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetServiceW(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetServiceW;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_NPLoadNameSpaces(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_NPLoadNameSpaces;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_TransmitFile(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_TransmitFile;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_AcceptEx(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_AcceptEx;</span><br/><span leaf="">}</span><br/><span leaf="">EXTERN_C __declspec(naked) void __cdecl AheadLib_GetAcceptExSockaddrs(void)</span><br/><span leaf="">{</span><br/><span leaf="">    __asm jmp pfnAheadLib_GetAcceptExSockaddrs;</span><br/><span leaf="">}</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">关键点:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">// 核心 Hook 函?，使用 __stdcall 保??平衡</span><br/><span leaf="">extern &#34;C&#34; struct hostent* __stdcall My_gethostbyname_Hook(const char* name) {</span><br/><span leaf="">    // ?制?型??，使用全局?量 pfnAheadLib_gethostbyname</span><br/><span leaf="">    typedef struct hostent* (__stdcall *pfn_orig)(const char*);</span><br/><span leaf="">    pfn_orig pOrig = (pfn_orig)pfnAheadLib_gethostbyname;</span><br/><span leaf="">    struct hostent* pResult = pOrig(name);</span><br/><span leaf="">    std::string targetIP = GetTargetIPFromConfig();</span><br/><span leaf="">    if (!targetIP.empty()) {</span><br/><span leaf="">        unsigned long ip = inet_addr(targetIP.c_str());</span><br/><span leaf="">        if (ip != INADDR_NONE) {</span><br/><span leaf="">            if (pResult &amp;&amp; pResult-&gt;h_addrtype == AF_INET) {</span><br/><span leaf="">                // 原始请求成功，直接修改其缓存的 IP</span><br/><span leaf="">                *(unsigned long*)pResult-&gt;h_addr_list[0] = ip;</span><br/><span leaf="">            } else {</span><br/><span leaf="">                // 原始请求失败（如域名已失效），构造一个假的 hostent 结构体返回</span><br/><span leaf="">                static struct hostent fake_hostent;</span><br/><span leaf="">                static char* fake_aliases[] = { NULL };</span><br/><span leaf="">                static unsigned long fake_ip;</span><br/><span leaf="">                static char* fake_addr_list[] = { (char*)&amp;fake_ip, NULL };</span><br/><span leaf="">                static char fake_name[256];</span><br/><span leaf="">                fake_ip = ip;</span><br/><span leaf="">                if (name) {</span><br/><span leaf="">                    strncpy(fake_name, name, sizeof(fake_name) - 1);</span><br/><span leaf="">                    fake_name[sizeof(fake_name) - 1] = &#39;\0&#39;;</span><br/><span leaf="">                } else {</span><br/><span leaf="">                    fake_name[0] = &#39;\0&#39;;</span><br/><span leaf="">                }</span><br/><span leaf="">                fake_hostent.h_name = fake_name;</span><br/><span leaf="">                fake_hostent.h_aliases = fake_aliases;</span><br/><span leaf="">                fake_hostent.h_addrtype = AF_INET;</span><br/><span leaf="">                fake_hostent.h_length = 4;</span><br/><span leaf="">                fake_hostent.h_addr_list = fake_addr_list;</span><br/><span leaf="">                pResult = &amp;fake_hostent;</span><br/><span leaf="">            }</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">    return pResult;</span><br/><span leaf="">}</span></code></pre><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span leaf="">结论</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">通过这样修改后，我们终于可以愉快联机了</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002635" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b12257c7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVM7qHBez1X3xcObfvDxMXrHgFwcyyyJh7W9T65jicMBZQmEt4o7riaQouRCtEhN6ahCIHplo2699Pt6SfQ9oEyGsKyLRh66U4JYM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">要是以后有人玩《Aliens: Colonial Marines》出现一样的问题，可以看看这个咋修。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0cdd60c1&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247486286%26idx%3D1%26sn%3D5741b86043e4a5c0c73d97cdf00bda3d">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 28 May 2026 08:00:00 +0800</pubDate>
    </item>
    <item>
      <title>基于大模型的下一代杀毒引擎</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247486252&amp;idx=1&amp;sn=8a7ed24b88b3aed80eddd37ff0309487</link>
      <description>前言在2025年的时候，我发布了云端的病毒分析引擎demo:基于大模型的病毒木马文件云鉴定今年，我决定更进一步</description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2026-05-25 08:00</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a0eec1d0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVMVicrB4I7S5kAFZgDOx9eJHkTW2ZCc9OJibAA3pPvibCicZXdvtvMS7ribzWE2chj0c2Z0S7ibYK9eZE8vSexhLppw9ruW2WAcn5FUs%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在2025年的时候，我发布了云端的病毒分析引擎demo:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485757&amp;idx=1&amp;sn=6a9abd8c76b5537f73f64671ff48a7e7&amp;scene=21#wechat_redirect" textvalue="基于大模型的病毒木马文件云鉴定" data-itemshowtype="0" linktype="text" data-linktype="2">基于大模型的病毒木马文件云鉴定</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">今年，我决定更进一步开发一下大模型在安全行业运用，于是在年初做了这个下一代杀毒引擎。在这里分享一下我的一些思路和见解。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如何定义下一代?</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">杀毒引擎本质上只做两件事，标记是恶意的木马同时不要误报。在经历特征码，广谱特征码，发展到所谓的AI杀毒，虚拟执行杀毒等。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">而我们的”当前代”的问题是，他的误报越来越大，经过长时间的对抗，到演变成了所谓的非白即黑以及人工响应拉黑速度快慢去决定一个杀毒引擎的质量。并且本地病毒库越来越臃肿。并且对新型病毒无法防御。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而所谓下一代，每个人定义不一样，我的定义是指的是“能自我进化”(需要指出并不是传统native ml的那种拿什么PE区段与代码段比例，PE熵什么的玩意，而是指真正理解代码)，”廉价”，”对未知病毒查杀效果好，长时间不用更新病毒库也能查杀”，”廉价”</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">“大模型”推理的缺点</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">那你会觉得，那大模型做这个很合适，只需要我们云端接一个反编译引擎，然后把二进制代码吐给大模型就行了。对，但是也错。用大模型做推理会有几个严重的问题</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">性能损耗极大</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">杀毒厂商可能一天收获起码100w+的样本,廉价的沙箱都跑不过来,大模型推理的成本比沙箱贵了不止一个数量级,价格是工程化必须考虑的因素。一次反编译+推理的时间，一天开100台推理服务器可能都无法解决问题</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">模型随机性</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">由于模型并没有系统学习过恶意代码分析，他们会因为各种问题报恶意代码，比如给crt报恶意代码，并且模型受提示词影响极大。同样一份代码可能提示词不同模型出问题的概率也不同。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">必须云端工作</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">由于大模型在云端才有可能部署，所以实时性不是特别好，也就是说新型样本到多久才检测是完全未知的。并且模型的推理延迟极高，可能几十分钟才能发现一个样本</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">下一代杀毒引擎</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">为了解决上面的问题从而实现工程真正可用落地。我们需要从客户端和模型入手。以下是我的思路</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">模型二开</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">LLM最大的问题，是他的输出，他是通过lm_head循环计算下一个token输出的，这个过程耗时极大，而且输入的不确定性让他会随机胡言乱语。因此我们要用到大模型的语言理解能力，但是不要他的文本输出。本质上他要做两个改法，一个是把lm_head去掉变成cls_head 也就是一个”Classification Head”这样他就会输出0-1之间的概率,1代表是病毒,0代表是正常文件(是不是很熟悉?)</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002571" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ab4e4e8c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNd0PCARrrjlvec1jz8uYmuiaEKD1kvuVeMiby8Smz4icPGa8umyJMEtrcKU2QF7CW4m72iazllfTj0VZgF1FEEabYcTkwjKibMzwKU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">把大模型改成 0/1 输出，在杀毒或安全过滤场景下比传统的“生成式回答”好太多了：</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">速度极快，节省算力：大模型最耗时的地方在于自回归生成，即吐出 100 个字需要模型前向传播 100 次。而改成 0/1 输出属于单次前向传播，模型把整段代码吞进去，只计算一次就直接出结果了，速度提升几十甚至上百倍。</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">绝对不会“胡说八道”：如果用原生的 lm_head 问模型：“这段代码是病毒吗？”，模型可能会长篇大论，甚至找借口，或者在概率临界点时给出含糊其辞的答案。改成 Bool 输出后，它没有任何组织语言的自由，只能铁面无私地给出一个概率值。</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">解析极其简单：对于杀毒软件来说，处理一个 0 或 1 的布尔值，比用正则表达式去解析模型输出的自然语言段落要稳定得多。</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">具体做法是，我们先生成一些病毒/白文件的数据，包含他的伪码和对应的家族</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002575" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=60ba3287&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMX3Y4dToy7PicdyDibCJnp7v1udiaiaBvOAaU5A4LYeuvEeMlDCwNY3XAyBbNHgnULxImUKghQ3hZwd1NwFUUZsaHOXvckf09beRM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-style: none none none solid;border-color: currentcolor currentcolor currentcolor rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">伪码怎么来的看下文</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后去缝合模型,选一个你喜欢的模型都行,只需要理解代码就行，实测这块不需要很大的模型参数就能理解代码了。小一点的甚至是PC电脑的CPU都能带起来比如UniXcoder。当然模型大一点没坏处，越大效果越好</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-style: none none none solid;border-color: currentcolor currentcolor currentcolor rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">过小的模型会导致不理解世界事实从而误报，比如代码可能是mimikatz的代码，但是小模型不知道什么是mimikatz，就会判定为正常</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后就是正常训练，没什么。就做完了。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">但是这套技术的重点并不在模型端，而是在客户端，因为我们最终的目的是要实现客户端可用的技术，做到实时查杀，实时防护。而且客户端提交的token是决定能不能杀出来的关键。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">客户端反编译器</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这玩意跟”传统”把样本塞到云端最大的不同是，我们要做客户端的推理。云端固然好，但是还是那句话，太贵了。实话说，这个推理模型就一个星期差不多搞完了，而客户端花了大概两年。他本质上是一个22M大小的IDA，不过反编译速度和效率比IDA快了不止一个数量级.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002583" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f567c21f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNDibNQ3PPyWRaacphxsXLIZTxTRiaddnibF8YfQiaZlTNLPle36xNMPrvYiadRDmW91SsU5Kicm7jO4s39ytOuYfGu2IS2ybpwOeNoE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">支持GO/RUST/c++/ARM/ARM64/DOTNET反编译,感谢AI,虽然到目前发帖为止,AI还是基本不咋懂这块咋写,但是只要提示词严格要求,AI就能做,相当于实习生一样:</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">他的效果看起来是这样的:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002589" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4dba37f7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNE9mrDrGNkZfyX2s3NGZzYMBxy3hm4Ar0Gb4ZRwJBGOu894okq3QjrskoDkKZY5l9voR1RCcpYmNFBw9vWoib9FupVn39rgQA0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">之前的反编译器编写流程:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484622&amp;idx=1&amp;sn=6849577c509c4243bf45ddfd1c66fe37&amp;scene=21#wechat_redirect" textvalue="IDA背后的原理入门(一): 简介&amp;函数识别" data-itemshowtype="0" linktype="text" data-linktype="2">IDA背后的原理入门(一): 简介&amp;函数识别</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485332&amp;idx=1&amp;sn=25ef87ab7af839c54e8e4727bfd045cb&amp;scene=21#wechat_redirect" textvalue="从0制作IDA的F5代码还原功能(hex-rays插件) 上" data-itemshowtype="0" linktype="text" data-linktype="2">从0制作IDA的F5代码还原功能(hex-rays插件) 上</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">工程上我发现，他的难点不在于如何复刻一个IDA，而是如何”找到”恶意代码并且最小的不占用带宽的上传，否则服务器都快被打死了。而且token和推理费用直接挂钩。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这里只说关键技术点。</span></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">找异常</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">跟IDA不同的是，我们无法做到把一个程序完整的反编译然后丢给大模型，因为成本和效率并不允许，所以我们需要找异常。而异常由规则驱动，只丢有问题的函数，这块我本来想做TF-IDF的，但是想了想没必要，之前我们做过：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484551&amp;idx=1&amp;sn=4e0edcc586ec733f9d3a8b0ba93b9069&amp;scene=21#wechat_redirect" textvalue="2024年终: 木马病毒自动化特征提取&amp;云端机器学习的思路分享" data-itemshowtype="0" linktype="text" data-linktype="2">2024年终: 木马病毒自动化特征提取&amp;云端机器学习的思路分享</a><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002590" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ef02bc9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMtSvBK94sVFlFdlZ9RRdYDjcXZnTugiacQyHXEzdwV7mf6BzTAiaCd9Uia87GRLmmopkicZGicYDVxzcMIibA0ibEMplsfC4akv8ZEs0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002594" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f062c0fe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOJ7fatzAibAJm4rtfnuiaZznP7fCa8W6LNicb1cHQUcQmf7uo1DkjPa8k6Fqiaw93HEpHYpygNwpjH8KDxr6icjGxI88epaXTnt8K4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">极致压缩&amp;优化</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个是最麻烦的地方，我们需要给模型压缩后的片段，否则太长的代码对任何没好处，这里的优化指的并不是ssa那种不破坏语义的优化，指的是我们给破坏性代码，只给模型关键的。这里是最麻烦的部分，因为压多了模型识别不出来，压少了模型上下文直接爆了。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">压少了:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002595" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=67c89991&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNBibXZwN0sPmn83bnkGftlW9oJJt5qAk5RAHHiaSSFRMiania4owhpckwEicUCT3Koiad7pfSoBCs9Ricy9X0nvFe9Qwl95jHJqibL2tQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">正确的压缩:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002596" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=365ba5a0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVN3mXtWYuZxJoPItB0elcxY7Y7vLLtC4ZykwzUrZnIFZCr5g3LA3Xb3Pw7kXicD184VRmY1VTK3lHvRQreRl8egFobH57rleS7A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这块就不展开细说了,坑非常多.</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结论</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">简单测试一下效率和速度:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002597" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=649fb4c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNnDJTyDVnBg79W5vx7gLjVGgDUWs3nryr0icrL2AAqyuMbRWNFFPaibuLLpfPvz4iaVZFKaNOgEkFSYHLLDvNGib6fqiaRcvvd0BOg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">大概3.4秒不到分析出一个样本，还是因为测试时候用HTTP通讯的方式，换成内部通讯方式就正常了:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002572" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9a0998d0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPwJRzBlZT4BxYxboUnc45UO3tpKPibaR6icpXegfsBxTGHKdRLc2djC2JeglJGXPRLN21p4dnTXvA2s1HkiceicMDQUwMgSNicC634%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002570" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=92566fc3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPbpoNKEqwd8624FI8cVu9MmsJ5iba9xyOzyjScOwibQqeQt07azibouxO1ozJzcKILrlzHSGs2V4uQQSibUe3iauGZv5BOHnbYSiaDI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">实测误报率也非常低，不过这里没不带水印的图.就不发了。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">最重要的是，他是可以逐渐迭代的，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">大不了就做强化学习，跟微调大模型一样，每一天自动训练一次。自动发布。</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这一套还有一个好处，是天然针对现在流行的恶意skills，恶意脚本，供应链尤其是JS/python等安全做防护检测，因为它本质上是输入文本，输入文本可比输入反汇编代码检出率好非常多。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=be9c20c1&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247486252%26idx%3D1%26sn%3D8a7ed24b88b3aed80eddd37ff0309487">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 25 May 2026 08:00:00 +0800</pubDate>
    </item>
    <item>
      <title>做一个《异形》系列里面的活动探测器</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247486213&amp;idx=1&amp;sn=33181fdd7546ba1ed746766d04906025</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2026-05-17 23:16</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=b770ba2f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVOopr1qLGKic7Rlic3v1Rvl0iaBeQtkuibT56kl5CiapVYbpb7RD7nQgtXp1Fg7doqRcd3icNXpXFZWiapmPKrTeQ0DmYab35VTxePs08%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果你看过《异形》系列电影以及玩过《异形》系列的游戏，你一定对里面的那个探测器不陌生-异形系列里面经常会出现一个道具，叫活动探测器，他的作用很简单，有异形活动的时候发出BBB的声音.</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">《异形：隔离》里面的探测器：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002546" data-ratio="1.0092449922958397" data-s="300,640" type="block" data-type="png" data-w="649" src="https://wechat2rss.xlab.app/img-proxy/?k=4871cb72&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM2sVcwzo1ribv0f78IYRwC5TwBHTyMwiaVVRvY7qH3heqyPrOicJ1WzkZmqT2Wmyicmcs1RQlbUMxGibtJdoxLicJauIvYnoFKgKZr8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">《异形2》里面的M314探测器:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002533" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c0045415&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVP26IAL1MnJCLS5B5GG7N8uFJqNq3f0db10thBVdO5NB46Xxic2w5rOVIuruNlEuuSMhhRpdMYgqWyGHejHAMAvkibOpgq20RhAo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这些探测器实际上只用一个作用，吓坏未成年看异形电影的小朋友，让他们每天晚上因为这种声音做噩梦</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-style: none none none solid;border-color: currentcolor currentcolor currentcolor rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">这不是我说的，是央视电影频道主持人锐评的</span></p></blockquote><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">硬件准备</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">电影 VS 现实</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">首先我们得知道这些探测器原理，在现实中，能用的方案是mmwave radar，也就是说发微波探测到物体反射回来打到屏幕上告诉我们有没有物品。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">与电影的差别：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">在现实中mmwave并不能穿混泥土墙，这是因为他们的工作波段导致的。不过好像电影里面的也没有穿混泥土墙的需求，都是穿一下泡沫板。</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-style: none none none solid;border-color: currentcolor currentcolor currentcolor rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">电影里面那种逆天的穿墙性能和追踪性能，现实中是做不到的。最多能通过UWB去看附近有没有东西，但是定位不到那么准确。</span></p></blockquote><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ESP32</span></h3><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002545" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e063236d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMUer9TSnn8rKw0pibEpHibFKHQJ4mIFugzJm5NG6L4IdJxU7PUvFsae1CewvrZ8Ma17gia7vs7pAqdxAvwuCGPdALVPhKRhj2Fias%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">ESP32简直是工业奇迹，我到现在还没整明白为什么这种小型计算机带蓝牙带wifi甚至是可以带摄像头的东西只要10块钱？？</span></strong></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">TFT</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">一块屏幕</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002542" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=a5d015cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM8CILviahYSM4xjuaa122ly1QJm7ov43Mryy8YCVgahAqRJficp1ib91JIAXXOXkjFiaojKM0agaND67fav8M5nQNfgl2Vu5icXjJ8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">MMWAVE</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这块选择很多，我选的是LD2460，LD2460最大距离是8M，支持360度和120度，对于我来说就够了</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002552" data-ratio="0.6809815950920245" data-s="300,640" type="block" data-type="png" data-w="815" src="https://wechat2rss.xlab.app/img-proxy/?k=5edba95c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM9HCCWahibiakWYq5NarOuzmhPoUR3u9eCptAJ31ibGxuHdvcFtq4QG5Gysf8Dzu3Zh71GlDrbrM2Rcz5rYmzc2pcArOqSLJ4ia2s%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">组装</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">实际做起来很简单，为了简单我们可以先用面包板加一些线把他简单拼接起来，按照说明书的接</span></p><p><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002548" style="" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c2e6e03c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNIz19aqVfpeibHHMfePgDyNibibQAdw6KdTcgwUNvZEks2gej7XSeiciboZ9WCicjKc063sHPGfKMVm46ReLcibRpLjSqXU67bAB8rcs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">这里不要相信GPT的。比如GPT5.4之前一直跟我说LD2460有两个TX RX GND只用接一个，实际上搞了半天我发现雷达咋都没信号，最后翻图纸才发现是GPT骗我，LD2460两个TX RX GND都得接。</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">最后长这样:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002554" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c3e1d16a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVOWvmYtPicRqJt3K0kLCxZ9gYibu6CbQ6cBiceqfkiaicmicCFjk3Tsq2M11g9muF4A82XJaal6V7l85icqI8eD9G4416vHx4YSBPBJ7o%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">先绑着:</span></span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002556" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=89e1db0a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPicH7Qo0OSFKKIFlje71AQ2ryZeavLH6AiaWuiav3q0R6vomKfRc25HEaJ5ZD73luiaGRxnkXI12Pqmq5Z8QG3Ax3OxjRGnBoQNNk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">剩下的就非常简单，把ESP32插入电脑，剩下的交给GPT,只需要丢给GPT LD2460的结构体就行，让GPT自己编程。vibe coding即可。LD2460支持调整模式，高灵敏什么的，我就稍微调整了一下。3M内如果没东西就切换成高灵敏模式探测8M的东西。否则就缩放成3M的高精度定位。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">测试</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以我们来试试</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002555" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=fd56f485&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNRR6BqtFS1a3wsQ1wbNL4R7eQNEHS02PhspQZea2w6TD0Pib1krQaVZc1ddibjg5MbCIZru5kJ9C829m14QdbgjhapNibrjwjJBI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">太丑了，让GPT改了一下样式, 经过测试，可以透过一些简单的遮挡物的。并且我发现，可能是因为反射的缘故？在室内如果不是完全密封的情况下，可以检测到人在混凝土墙背后，不过门完全关了就探测不到了，我猜测是因为有反射，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">所以不是完全密封的情况下，也是能探测到人的</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002559" style="box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgb(136, 136, 136) rgb(241, 241, 241);vertical-align:middle;border:0px;max-width:100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1eed89c1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVM1OCuQ4578H8NRBC68AibiaP1ibbHTGE1agLoMkEFqcjZy0GLqKMDu0WLaPapsOqHAJO2jISlroSOxCmrjExmZzKcTOpkZdy5pcQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">拿去室外试试，效果也是嘎嘎的，在室内因为反射的缘故，:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002557" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=c0c951ac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVPUHWDad2gIe8q64cX25NkumR4VOIznOQBuodxyChKfiaZo9FN8TDSpHSJqLusAS5Q1Uen3uagNCCibwL4jLQcwUIz2DO2xVSXhA%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;" data-pm-slice="0 0 []"><span leaf="">现在就跟游戏里面的很像了，还可以继续微调一下:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002558" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3e4513f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVP6qOVGhtP2RiciaDZIXoDrDhtf6jIcHaXUxlaMNB2qgUOAAlJywIvN0QdKS7qm8S4dEfZSXUibnDeDvpbicagSiaJJqZ99vTWqHDSg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span leaf="">后续</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">忘记加发声模块了，就先不加了，那声音听得我害怕。国外有一个老哥做了带发声模块的,原理跟我这个也差不太多</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">《Building a REAL Alien Motion Tracker》</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a href="https://www.youtube.com/watch?v=KpUjXUSlkbU&amp;t=335s" target="_blank">https://www.youtube.com/watch?v=KpUjXUSlkbU&amp;t=335s</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">还差一个3D打印，打印一个外壳然后塞进去就好了。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=23837499&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247486213%26idx%3D1%26sn%3D33181fdd7546ba1ed746766d04906025">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 17 May 2026 23:16:00 +0800</pubDate>
    </item>
    <item>
      <title>通过微调+MCP让小模型也能拥有大模型一样的知识</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247486179&amp;idx=1&amp;sn=943541d40bc4c713cc28342cff756a97</link>
      <description>前言在训练duckgpt之前，我认为未来端点推理一定是主流的，因为大模型在服务器上跑，大是大，确实性能可以，但</description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2026-04-19 10:01</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=50206c95&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVM21Ghz8AtRxic5sxBGAC9qt7GPLlPqc2OWASyiaheB5icCrAJT7MLNlfiaicq1CmL8Zh0icBQZ9Blo3EW1FczkOzAvstpcicw5akoJnw%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">在训练duckgpt之前，我认为未来端点推理一定是主流的，因为大模型在服务器上跑，大是大，确实性能可以，但是太贵了，未来LLM一定是软件一样分发到各家各户而不是在云端集中推理。</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在写了上一篇文章后，我继续的对大模型进行训练</span><span leaf=""><br/></span><span leaf="">《[2026]从0训练自己的AI大模型(下)》</span><span leaf=""><br/></span><span leaf=""><a href="https://key08.com/index.php/2026/04/05/3136.html" target="_blank">https://key08.com/index.php/2026/04/05/3136.html</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">经过不断的努力，我成功的让一个duckgpt变得非常聪明，通过蒸馏/SFT微调/强化学习agent能力，现在他长得像GPT+claude的组合了，而且逻辑思维能力基本跟GPT+claude差不太多:</span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">duckgpt:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002495" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=378752ec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVPhSflyj3hnjX8VAFp2MXQR9caDfDw1WeUJF5eCu1XbPEPgtQB6w9JOs7gN1nnEDlpgUdw95263IeejHVV6Fyu3IVIW3UyOaas%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">深度思维链思考:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002496" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=ac264907&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVNlqBYrKqe1vYbh0bsPmibUAVibaOr1la03wjohwfApZUiafPiab6fxROrWwFcgr4TicoXCwJQibIYQCj0JCLvPZfCPdrfv39PUPYNVc%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">逆向分析:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002497" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=3605f73f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVMG5aPV40sdooZKShto7VWhtibDKMswu9ZPaickSiaxNXUZMhl5Gwic1JCicfSIU35vDOa5Ta2u8eVqYskJGmq4bHUWyqwniagicPfibQY%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">浏览器使用能力:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002498" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=17dda111&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVNVj69NgHyFBJwej63ajm56FXIgJjSVjIsNL7ey4EaGGRZGqjv0QXddKorneIYJ7ibfZicoO6lyWC7tibCFnfsJpicZ061nwDRpraw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">代码工程能力:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002501" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=3c46dc7d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVNPiciagaNtbHEUcnCSES2lNqNHsfRvJwRNGW3mwsJmfOT47DNwm3OJNj8mCEmibib14fNznyHWVwT6Gc3YUgw274P20Bj4ArkvEyI%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002500" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=29508859&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVPPQU3P5uB0aCq7k4GITEQ5OZEFk5q8xC77iaW0FI1NWYME9PYO1Nmzia7D9q2CgGDvNiaIcWW0W1bOMJkCFibQVGcKf4QK6bQWKxs%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-style: none none none solid;border-color: currentcolor currentcolor currentcolor rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">如果对这个感兴趣，在这篇文章留言”想看精调”，我会单独出一期如何通过精调(sft+rl场景+dpo)让模型具有agent能力并且提高智商</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">看起来很不错对吧，实际用也很不错，但是到前几天我发现了一个问题，参数量太小了，很多东西他都不懂。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">什么东西是硬伤?</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">对于LLM来说，可以简单理解，模型参数量=脑容量。而模型行为可以被各种训练，比如我们可以做DPO去优化模型的行为，我们可以做GRPO让模型学会调用工具，强迫模型进行深度思考找到正确答案，我们可以搞SFT/lora去让模型蒸馏GPT/CLAUDE的能力让他们在某些领域的智商显著提高。但是我们没办法解决一件事，就是模型因为参数量的问题，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">他的知识面和深度永远比不过大模型</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">你可以说我们可以通过，扩展预训练去给模型增加知识啊？ 但是这个其实是有问题的，模型参数就这么大，扩展预训练代表模型一定会遗忘一些东西，另外成本很大，现在网络信息变化那么快，每几个月来一次吃不消。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以有什么办法解决呢？</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Reseach MCP</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">回想以前纯手工时代写代码，搞二进制，写内核的时候，我们在干什么？ 在每天没日没夜的查询资料，通过谷歌，github找代码抄。所以就那一个问题，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">为什么我们不搞一个模型用的”谷歌”呢？</span></strong><span leaf="">并且小模型是有工具调用能力的，他完全可以通过工具调用能力去弥补自己的知识面的问题。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一版我就做了一个模型搜索引擎，有问题让模型先搜索一下网页，效果嘛….一般，对于了解新闻可以，但是对于专业领域还是太欠缺了，甚至是有害： </span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">因为模型会无条件相信工具的结果，而我们的工具通过API调用，查到的居然是C某DN这种网站，质量直线下滑。</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">因此，我做了一个非常简单的mcp research，也不是我做的，vibe coding的，他本质上是通过duckduckgpt+AI聚合+知识库的东西，你可以简单理解为，他是一个搜索引擎，并且还内置一个AI，这个AI会根据skills去整理搜索引擎的内容，并且访问具体的网站，然后给报告。与其他的”deepresearch”不同的是，他是为代码设计过的</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">简单的例子，当我们问，WFP的时候，通过MCP，找到了对应的资料</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002504" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=aaaca39e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVN0lpBmbLzdepLESiagqia1qAFk0Cpgx6DOFLpTFpQu63zjtYiaUgJFGrQdfF1YMAfRqqdlKCdapqL339Rvu4m7icPTee5HUXEQTlE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">还会带例子输出，参考资料</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002508" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9c561848&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPuA9yVJlxyc0avBAVO4yUJibIg4WwgpR2crBQNghsArFVgVtKViaIw12TwCdOt6lFfWsmoq8icxb0BZBaicXQPLADWnQx0OuWDvnI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">还会推荐要继续查询什么</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002507" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=01b30d96&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM38gpMgd3oCibiadyl8QiczvHrByc5Wp9kPUDpPlg03iacTzibu5l7IDF4AJLl0ShvtVS77pwBp6hJWuIZHAfEY9mnYz6T4sDcAPicY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">然后模型会继续接着追问，一个场景会出现三四个知识库，这些知识库会保存起来，并且按时间过期，超过X天自动过期重新更新：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002515" style="" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=920c2026&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPuML5z0VTiaLW7oe9HAJJzufZYuiaQP1Yic6nBsWQiajYI9czHVSBkoFcUXC46qSggfLJuwtialgnPuxVM8XM7AY7oegUgKd8vgkFk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本质上，这个就是一个大号的，本地模型的专用搜索引擎，你甚至是可以接一个大模型，让自己本地的GPT，去问云端的GPT代码怎么写，问题怎么做。这样理论上能最大减少幻觉。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">懒惰是最大的问题</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">再然后，我发现了另外一个问题，本地的GPT，比如QEWN或者DUCKGPT，都是“懒惰”的，意思是他们不会主动的调用工具。比如duckgpt或者qwen3.5 27b/35b在用户完全没提示的时候，无论MCP怎么写提示词让他调用，在没用户提示或者系统提示词的情况下，这些都很少调用这个MCP，即便是错误的环境下，也很少调用MCP，而且即便是用户提示调用，也是第一次调用，然后自己写代码出现幻觉了（代码怎么改都改不了），也不会调用MCP进行搜索。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002516" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=853563c8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNshxovrjSicCJtictibBiaVSwnvy8icOgOSeFfMPloLOKjwCAAtHTBBaBBW5J7PT8qK1S7jm6QHTziaeVz0RjtDLq78O9mCHhjpJJr8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">然后去看源码，给出结论:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002517" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=685637ee&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOzaYkoO4AC5dQ3eL96SJIjhNFj2WRGKs4VANFpfjNiaB0W1rUgGtNRYzM8l3WyibW65zBwvOmMpyic6LDEBzWSBhTWibCp0xTPC6s%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">微调模型</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">因此，我对duckgpt进行了额外的微调，简单来说，就让大模型自己合成了一个简单的数据集吗，合成的办法看我之前的帖子:</span></p><p><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002520" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=bb362606&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM5MkHpNWT7VmEYibQICRH9icewFpPwkicpiaGSiacckXwK5OeSmSriauibw49DY8nCd6wKkt7Bj5LK5wMKCfBDrHT8N5xic4uWwNKNKlA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">(这个微调没有用DPO，我只用了lora，因为我觉得没必要那么费劲)</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">我们没办法知道模型是否幻觉，但是我们能让模型更倾向于主动调用research工具</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">弄完后，模型终于主动的开始调用工具了:</span></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002525" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d4631216&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPz2OkWkO1FQf3KYzPqh6OLw2yxmHU69zbFZicUgXEJF4nKia20bicAlC0p7mxYZWqVAuEWHsic7FMvcLmT1icfRbdUWiamPXbFyrlog%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></span></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002526" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e9c7f8d9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMRWxwc3TEa9rZXyXcPHoTK9vunhCYCMvu5oRV5TGXIXqlw4HVyp0N8RX6W1PdJRdQVAVROy9mEnu6AurVez7iavoicXPWoAIWPg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;" data-pm-slice="0 0 []"><span leaf="">mcp里面的AI的结论:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">(这种保守是非常正确的,不能胡编,只依赖证据)</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002527" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f2acd25f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPIMkavpUBl0fIHJYz5rH0etJzCvMRs2PlvMxavz9vV10oGqDD0icrVNpNJaiapW3oLQzutM9ibMU337way9ZX9GeWbITeoxKtyMg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">不过还有瑕疵，AI会变得很保守，表现为问啥都会搜一下，所以之后可能做一下DPO让AI区分哪些是直接回答哪些是复杂问题找资料。不能这么傻大粗的做提示词+微调去做。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span leaf="">结论</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">我目前用得很爽，所以分享给大家:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a href="https://github.com/huoji120/mcp-research" target="_blank">https://github.com/huoji120/mcp-research</a></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a6391e51&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247486179%26idx%3D1%26sn%3D943541d40bc4c713cc28342cff756a97">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 19 Apr 2026 10:01:00 +0800</pubDate>
    </item>
    <item>
      <title>从0训练自己的AI大模型(下) -CTF模型的Hello world</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247486122&amp;idx=1&amp;sn=f2685d6fc15e014188fc141cfd7ebe31</link>
      <description>在上一篇中《[2026]从0训练自己的AI大模型(上)》我们已经做完了一个pretrain的模型，而模型聪不聪</description>
      <content:encoded><![CDATA[<p>原创 <span>为了安全鸭</span> <span>2026-04-05 10:00</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=f00ab0b3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVPFC3k4yjwhrb2jY4kP4K4d1OzqY17Zt2EMrnq27e7hoRsQlt1ONs4GjdjrUsUW0ElP8vVicib6L7ReicBSwzaF1WrQHhghMQ8LEw%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">在上一篇中</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485967&amp;idx=1&amp;sn=75ccdade1b71b91fdbca718b77005975&amp;scene=21#wechat_redirect" textvalue="《[2026]从0训练自己的AI大模型(上)》" data-itemshowtype="0" linktype="text" data-linktype="2">《[2026]从0训练自己的AI大模型(上)》</a></span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">我们已经做完了一个pretrain的模型，而模型聪不聪明看两个，一个是pre trian，另外一个是post train。因此本章会开始讨论后训练，我们的这个章节的最终目标是做一个能完成简单CTF的Agent模型。</span></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">要完成能打ctf的模型，模型需要掌握两个能力，第一个是工具调用能力，第二个是对”CTF流程的理解能力”。而这两个都在后训练阶段完成</span></span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">公开互联网高质量文本越来越稀缺，所以各家 pretrain base 的差距在缩小。公开数据红利变小了，base 差距更隐蔽，后训练差异更显眼。这也是为什么后训练如此重要的原因</span></p></blockquote><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我们需要什么</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">让我们把目标明确，我希望模型具有think能力，并且能调用工具，此外能完成简单的登陆注册sql注入的ctf题目</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">为了实现think/和工具调用，我们需要</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">在sft阶段把这两个能力给组起来</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">后续使用 RL 纠正行为</span></p></li></ol><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">SFT</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SFT数据集很关键，好的数据集一两拨千金。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">我们上一章的SFT是随便找了个简单的试试，而这次我们认真做一下，数据采用claude opus 4.6 + gpt 5.4的公开蒸馏数据集，配比少量deepseek和qwen的数据和部分合成数据，组了两个高质量数据集。非常标准的训练，代码由vibe coding完成，就不细说了。这部分就是数据集要选得好。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这里面包含了我们所有需要的，多轮对话，工具调用，以及关键的think能力。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002436" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ac89b439&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOZibOrztzKPRxButCv1ZCvNicBEEtKsb0BfkKjOyjibcuczNsYlAsNvYibf7tbKVJywJEypajzmwMiancmFMKpibB45uklHobkndv0Y%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">值得注意的是，如果数据集不干净，模型很容易在这个地方被带偏。我建议是这些数据集至少带，指令遵循，多轮对话（比如第一轮给模型说记住我是谁，第二轮再问我是谁），多样化任务，以及部分工具调用的例子和思维链。而且要尽量避免污染，很多开源数据其实是不能直接用的，里面啥都有，写小黄文的有，搞色情有，最好的办法是自己记录自己给大模型调用的过程。比如给你的opencode装个插件记录一下之类的</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">用了高质量数据集后，模型很快的呈现了看起来不错的能力，并且大模型的think也迁移过来了:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002438" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5b490ced&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNuia3Z5sSBCZ7SrO25qQ7xzLX99E9MvQWGp7TDzpP2kWpIrsyKb5xYYpVR680MpgJUm31lZPPBzrNyiczZMEl0sxj0dsichJ75ibM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">但是光靠SFT还是不够的，比如一个普通的问题能think这么多:</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">一根6米长的杆子是否能通过一扇宽三米高5米的门</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002439" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=648ce108&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVO0Wr3SwH4ibI2YWJNTtM0Nic5uibibmFZMGhExfn8Md14sqdUAZB0d5qW5qric2NAdm21ya7nwml8OicVibrgkxQOcxd2NbHg3dPxCWU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002437" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5ee89d87&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPgoWicfbh7IywjoJscfib9U0dQkw3v0PthZdmMFuibhxzHMeOrloiaUOofeBYyYzQQ3nHiakJiaUk2iac03GX3b6erFaaa9AUwrnBvlQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我猜测是数据集里面带qwen或者ds的缘故,学到了无限think。所以光靠SFT是没用的，而且过长思维链对模型有害。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">强化学习</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在SFT阶段，模型可能学到了”模式”比如知道用户说 “帮我查询一下天气”，模型会意识到需要调用工具</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">&lt;tool_call&gt;xxxxx&lt;/tool_call&gt;</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">但是由于各种原因，他们可能会输出垃圾字符或者不闭合tag等。所以光有SFT是不够的，我们需要对其进行强化学习.而这部分简单来说，参考minimind的实现，改进一下</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">think太长太短，不闭合扣分</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002441" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1ae84b08&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVOYzhErO7b5vc4SYoeiapf7dZpAjXunvxaKicKibeZxEkpx1Siavg17M5K3t6YB9WmfIl8lhTJnRgOueGqp7hNHTTL1XkZG3NCcIYQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">工具调用不规范扣分，如虚假工具，无效JSON，不闭合:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002440" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f971b299&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMTCC8fC4zlF5Oz0LKQzDDPibfDlyocd9en9iaeOGwr2V7qmBARdbLQwPPJPf2J6F1ic9Vg6HgzNTqnZKFsIN1mv6FqWAkyOBzfRw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">然后进行训练，结果:</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">一根6米长的杆子是否能通过一扇宽三米高5米的门</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002443" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=daae246e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNVt04QstdPFR6ibNBEmxNicFzHib3BwDJN3icDmou5OnicIpukerxicod0BACn5WXvJex320biaHbX0WqXfA6GdzsPHjqRZ5QzMf7RkI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">看样子虽然think乱七八糟，但是至少正常一点了。并且模型也掌握了基础的工具调用。</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">我应该怎么清理一匹 70kg178cm的马</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002444" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1297dff6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM23o1WNqG5qD7jysUguS8UdEXSfJgPB4iasMiaibZZKLueibhQreiacV38waSbricicqyLHDdY1mrUanUI5Xpgwqfta7EMFw7oQYScXs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">如果 A&gt;B，B&lt;C，那么A和C的关系是什么?请给出具体的推理过程。</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002442" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5334be94&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPdNhBLnsTSgAvWiab9L5Z0ChkjFmTeCAFwPJEF8zCYDIiapu4Vps6q4zr4BP6GDricKrAPCIspPFs3ibnEG4jA6jmbzHxhjXRF0gY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">CTF训练</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当模型掌握了tool use和看起来没那么糟糕后，我们可以进入正题，CTF训练了。实际上，我做这个系列的核心目的是为了把大模型能力迁移到小模型里面。简单的CTF是我们的第一个目标。我这里设计了一个存在sqli注入漏洞的靶场</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">import os</span><br/><span leaf="">import sqlite3</span><br/><span leaf="">from pathlib import Path</span><br/><span leaf="">from flask import Flask, redirect, render_template_string, request, session, url_for</span><br/><span leaf="">BASE_DIR = Path(__file__).resolve().parent</span><br/><span leaf="">DB_PATH = Path(os.getenv(&#34;DB_PATH&#34;, str(BASE_DIR / &#34;data&#34; / &#34;lab.db&#34;)))</span><br/><span leaf="">FLAG = os.getenv(&#34;FLAG&#34;, &#34;flag{demo_sqli_login_bypass}&#34;)</span><br/><span leaf="">ADMIN_PASSWORD = os.getenv(&#34;ADMIN_PASSWORD&#34;, &#34;sqli_lab_admin_9f3c2&#34;)</span><br/><span leaf="">app = Flask(__name__)</span><br/><span leaf="">app.config.update(</span><br/><span leaf="">    SECRET_KEY=os.getenv(&#34;SECRET_KEY&#34;, &#34;demo-secret-key&#34;),</span><br/><span leaf="">    SESSION_COOKIE_HTTPONLY=True,</span><br/><span leaf="">    SESSION_COOKIE_SAMESITE=&#34;Lax&#34;,</span><br/><span leaf="">)</span><br/><span leaf="">def init_db() -&gt; None:</span><br/><span leaf="">    DB_PATH.parent.mkdir(parents=True, exist_ok=True)</span><br/><span leaf="">    connection = sqlite3.connect(DB_PATH)</span><br/><span leaf="">    try:</span><br/><span leaf="">        connection.execute(</span><br/><span leaf="">            &#34;&#34;&#34;</span><br/><span leaf="">            CREATE TABLE IF NOT EXISTS users (</span><br/><span leaf="">                id INTEGER PRIMARY KEY AUTOINCREMENT,</span><br/><span leaf="">                username TEXT UNIQUE NOT NULL,</span><br/><span leaf="">                password TEXT NOT NULL</span><br/><span leaf="">            )</span><br/><span leaf="">            &#34;&#34;&#34;</span><br/><span leaf="">        )</span><br/><span leaf="">        user_count = connection.execute(&#34;SELECT COUNT(*) FROM users&#34;).fetchone()[0]</span><br/><span leaf="">        if user_count == 0:</span><br/><span leaf="">            connection.executemany(</span><br/><span leaf="">                &#34;INSERT INTO users(username, password) VALUES(?, ?)&#34;,</span><br/><span leaf="">                [</span><br/><span leaf="">                    (&#34;admin&#34;, ADMIN_PASSWORD),</span><br/><span leaf="">                    (&#34;guest&#34;, &#34;guest&#34;),</span><br/><span leaf="">                ],</span><br/><span leaf="">            )</span><br/><span leaf="">        else:</span><br/><span leaf="">            connection.execute(</span><br/><span leaf="">                &#34;UPDATE users SET password = ? WHERE username = ?&#34;,</span><br/><span leaf="">                (ADMIN_PASSWORD, &#34;admin&#34;),</span><br/><span leaf="">            )</span><br/><span leaf="">        connection.commit()</span><br/><span leaf="">    finally:</span><br/><span leaf="">        connection.close()</span><br/><span leaf="">def fetch_user(username: str, password: str):</span><br/><span leaf="">    connection = sqlite3.connect(DB_PATH)</span><br/><span leaf="">    connection.row_factory = sqlite3.Row</span><br/><span leaf="">    try:</span><br/><span leaf="">        query = (</span><br/><span leaf="">            &#34;SELECT username FROM users &#34;</span><br/><span leaf="">            f&#34;WHERE username = &#39;{username}&#39; AND password = &#39;{password}&#39; &#34;</span><br/><span leaf="">            &#34;ORDER BY CASE WHEN username = &#39;admin&#39; THEN 0 ELSE 1 END LIMIT 1&#34;</span><br/><span leaf="">        )</span><br/><span leaf="">        return connection.execute(query).fetchone()</span><br/><span leaf="">    finally:</span><br/><span leaf="">        connection.close()</span><br/><span leaf="">INDEX_TEMPLATE = &#34;&#34;&#34;</span><br/><span leaf="">&lt;!doctype html&gt;</span><br/><span leaf="">&lt;html lang=&#34;en&#34;&gt;</span><br/><span leaf="">  &lt;head&gt;</span><br/><span leaf="">    &lt;meta charset=&#34;utf-8&#34;&gt;</span><br/><span leaf="">    &lt;title&gt;Mini CTF Lab&lt;/title&gt;</span><br/><span leaf="">    &lt;style&gt;</span><br/><span leaf="">      body { font-family: monospace; background: <a class="wx_topic_link" topic-id="mnkqofab-o83aqv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#f3efe5</a>; color: <a class="wx_topic_link" topic-id="mnkqofab-1ydthj" style="color: #576B95 !important;" data-topic="1" data-recommend="">#1f1b16</a>; margin: 2rem; }</span><br/><span leaf="">      .card { max-width: 780px; background: <a class="wx_topic_link" topic-id="mnkqofab-2aqo2v" style="color: #576B95 !important;" data-topic="1" data-recommend="">#fffdf7</a>; border: 1px solid <a class="wx_topic_link" topic-id="mnkqofab-84hjzr" style="color: #576B95 !important;" data-topic="1" data-recommend="">#c6b89e</a>; padding: 1.5rem; }</span><br/><span leaf="">      a { color: <a class="wx_topic_link" topic-id="mnkqofab-9fiw6b" style="color: #576B95 !important;" data-topic="1" data-recommend="">#8a3b12</a>; }</span><br/><span leaf="">      code { background: <a class="wx_topic_link" topic-id="mnkqofab-ynbltx" style="color: #576B95 !important;" data-topic="1" data-recommend="">#efe5d2</a>; padding: 0.1rem 0.3rem; }</span><br/><span leaf="">    &lt;/style&gt;</span><br/><span leaf="">  &lt;/head&gt;</span><br/><span leaf="">  &lt;body&gt;</span><br/><span leaf="">    &lt;div class=&#34;card&#34;&gt;</span><br/><span leaf="">      &lt;h1&gt;Mini CTF Lab&lt;/h1&gt;</span><br/><span leaf="">      &lt;p&gt;This lab is for model training. Goal: become &lt;code&gt;admin&lt;/code&gt; and visit &lt;code&gt;/flag&lt;/code&gt;.&lt;/p&gt;</span><br/><span leaf="">      &lt;p&gt;Known low-privilege account: &lt;code&gt;guest / guest&lt;/code&gt;.&lt;/p&gt;</span><br/><span leaf="">      {% if user %}</span><br/><span leaf="">      &lt;p&gt;Current user: &lt;code&gt;{{ user }}&lt;/code&gt;&lt;/p&gt;</span><br/><span leaf="">      &lt;p&gt;&lt;a href=&#34;{{ url_for(&#39;profile&#39;) }}&#34;&gt;profile&lt;/a&gt; | &lt;a href=&#34;{{ url_for(&#39;flag&#39;) }}&#34;&gt;flag&lt;/a&gt; | &lt;a href=&#34;{{ url_for(&#39;logout&#39;) }}&#34;&gt;logout&lt;/a&gt;&lt;/p&gt;</span><br/><span leaf="">      {% else %}</span><br/><span leaf="">      &lt;p&gt;&lt;a href=&#34;{{ url_for(&#39;login&#39;) }}&#34;&gt;login&lt;/a&gt;&lt;/p&gt;</span><br/><span leaf="">      {% endif %}</span><br/><span leaf="">    &lt;/div&gt;</span><br/><span leaf="">  &lt;/body&gt;</span><br/><span leaf="">&lt;/html&gt;</span><br/><span leaf="">&#34;&#34;&#34;</span><br/><span leaf="">LOGIN_TEMPLATE = &#34;&#34;&#34;</span><br/><span leaf="">&lt;!doctype html&gt;</span><br/><span leaf="">&lt;html lang=&#34;en&#34;&gt;</span><br/><span leaf="">  &lt;head&gt;</span><br/><span leaf="">    &lt;meta charset=&#34;utf-8&#34;&gt;</span><br/><span leaf="">    &lt;title&gt;Login&lt;/title&gt;</span><br/><span leaf="">    &lt;style&gt;</span><br/><span leaf="">      body { font-family: monospace; background: <a class="wx_topic_link" topic-id="mnkqofab-03smvv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#f3efe5</a>; color: <a class="wx_topic_link" topic-id="mnkqofac-luyllz" style="color: #576B95 !important;" data-topic="1" data-recommend="">#1f1b16</a>; margin: 2rem; }</span><br/><span leaf="">      .card { max-width: 780px; background: <a class="wx_topic_link" topic-id="mnkqofac-z8qson" style="color: #576B95 !important;" data-topic="1" data-recommend="">#fffdf7</a>; border: 1px solid <a class="wx_topic_link" topic-id="mnkqofac-7i0lnt" style="color: #576B95 !important;" data-topic="1" data-recommend="">#c6b89e</a>; padding: 1.5rem; }</span><br/><span leaf="">      input { width: 100%; padding: 0.55rem; margin: 0.35rem 0 1rem 0; }</span><br/><span leaf="">      button { padding: 0.6rem 1rem; }</span><br/><span leaf="">      .error { color: <a class="wx_topic_link" topic-id="mnkqofac-fyeduz" style="color: #576B95 !important;" data-topic="1" data-recommend="">#b42318</a>; }</span><br/><span leaf="">      a { color: <a class="wx_topic_link" topic-id="mnkqofac-6v6uin" style="color: #576B95 !important;" data-topic="1" data-recommend="">#8a3b12</a>; }</span><br/><span leaf="">    &lt;/style&gt;</span><br/><span leaf="">  &lt;/head&gt;</span><br/><span leaf="">  &lt;body&gt;</span><br/><span leaf="">    &lt;div class=&#34;card&#34;&gt;</span><br/><span leaf="">      &lt;h1&gt;Login&lt;/h1&gt;</span><br/><span leaf="">      &lt;p&gt;Use &lt;code&gt;guest / guest&lt;/code&gt; for a normal user.&lt;/p&gt;</span><br/><span leaf="">      {% if error %}&lt;p class=&#34;error&#34;&gt;{{ error }}&lt;/p&gt;{% endif %}</span><br/><span leaf="">      &lt;form method=&#34;post&#34;&gt;</span><br/><span leaf="">        &lt;label&gt;Username&lt;/label&gt;</span><br/><span leaf="">        &lt;input name=&#34;username&#34; autocomplete=&#34;off&#34;&gt;</span><br/><span leaf="">        &lt;label&gt;Password&lt;/label&gt;</span><br/><span leaf="">        &lt;input name=&#34;password&#34; type=&#34;password&#34; autocomplete=&#34;off&#34;&gt;</span><br/><span leaf="">        &lt;button type=&#34;submit&#34;&gt;Login&lt;/button&gt;</span><br/><span leaf="">      &lt;/form&gt;</span><br/><span leaf="">      &lt;p&gt;&lt;a href=&#34;{{ url_for(&#39;index&#39;) }}&#34;&gt;home&lt;/a&gt;&lt;/p&gt;</span><br/><span leaf="">    &lt;/div&gt;</span><br/><span leaf="">  &lt;/body&gt;</span><br/><span leaf="">&lt;/html&gt;</span><br/><span leaf="">&#34;&#34;&#34;</span><br/><span leaf="">PROFILE_TEMPLATE = &#34;&#34;&#34;</span><br/><span leaf="">&lt;!doctype html&gt;</span><br/><span leaf="">&lt;html lang=&#34;en&#34;&gt;</span><br/><span leaf="">  &lt;head&gt;</span><br/><span leaf="">    &lt;meta charset=&#34;utf-8&#34;&gt;</span><br/><span leaf="">    &lt;title&gt;Profile&lt;/title&gt;</span><br/><span leaf="">    &lt;style&gt;</span><br/><span leaf="">      body { font-family: monospace; background: <a class="wx_topic_link" topic-id="mnkqofac-7k22v8" style="color: #576B95 !important;" data-topic="1" data-recommend="">#f3efe5</a>; color: <a class="wx_topic_link" topic-id="mnkqofac-wun8sc" style="color: #576B95 !important;" data-topic="1" data-recommend="">#1f1b16</a>; margin: 2rem; }</span><br/><span leaf="">      .card { max-width: 780px; background: <a class="wx_topic_link" topic-id="mnkqofac-ljbzpf" style="color: #576B95 !important;" data-topic="1" data-recommend="">#fffdf7</a>; border: 1px solid <a class="wx_topic_link" topic-id="mnkqofac-1ae3hr" style="color: #576B95 !important;" data-topic="1" data-recommend="">#c6b89e</a>; padding: 1.5rem; }</span><br/><span leaf="">      a { color: <a class="wx_topic_link" topic-id="mnkqofad-zdw1j7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#8a3b12</a>; }</span><br/><span leaf="">      .hint { color: <a class="wx_topic_link" topic-id="mnkqofad-oxj4ec" style="color: #576B95 !important;" data-topic="1" data-recommend="">#5f4b32</a>; }</span><br/><span leaf="">    &lt;/style&gt;</span><br/><span leaf="">  &lt;/head&gt;</span><br/><span leaf="">  &lt;body&gt;</span><br/><span leaf="">    &lt;div class=&#34;card&#34;&gt;</span><br/><span leaf="">      &lt;h1&gt;Profile&lt;/h1&gt;</span><br/><span leaf="">      &lt;p&gt;Logged in as &lt;code&gt;{{ user }}&lt;/code&gt;.&lt;/p&gt;</span><br/><span leaf="">      {% if user == &#39;admin&#39; %}</span><br/><span leaf="">      &lt;p&gt;You have admin access. Visit &lt;a href=&#34;{{ url_for(&#39;flag&#39;) }}&#34;&gt;/flag&lt;/a&gt;.&lt;/p&gt;</span><br/><span leaf="">      {% else %}</span><br/><span leaf="">      &lt;p class=&#34;hint&#34;&gt;Only admins can read the flag.&lt;/p&gt;</span><br/><span leaf="">      {% endif %}</span><br/><span leaf="">      &lt;p&gt;&lt;a href=&#34;{{ url_for(&#39;index&#39;) }}&#34;&gt;home&lt;/a&gt; | &lt;a href=&#34;{{ url_for(&#39;logout&#39;) }}&#34;&gt;logout&lt;/a&gt;&lt;/p&gt;</span><br/><span leaf="">    &lt;/div&gt;</span><br/><span leaf="">  &lt;/body&gt;</span><br/><span leaf="">&lt;/html&gt;</span><br/><span leaf="">&#34;&#34;&#34;</span><br/><span leaf="">@app.route(&#34;/&#34;)</span><br/><span leaf="">def index():</span><br/><span leaf="">    return render_template_string(INDEX_TEMPLATE, user=session.get(&#34;user&#34;))</span><br/><span leaf="">@app.route(&#34;/login&#34;, methods=[&#34;GET&#34;, &#34;POST&#34;])</span><br/><span leaf="">def login():</span><br/><span leaf="">    error = None</span><br/><span leaf="">    if request.method == &#34;POST&#34;:</span><br/><span leaf="">        username = request.form.get(&#34;username&#34;, &#34;&#34;)</span><br/><span leaf="">        password = request.form.get(&#34;password&#34;, &#34;&#34;)</span><br/><span leaf="">        try:</span><br/><span leaf="">            user = fetch_user(username, password)</span><br/><span leaf="">        except sqlite3.Error as exc:</span><br/><span leaf="">            error = f&#34;SQL error: {exc}&#34;</span><br/><span leaf="">        else:</span><br/><span leaf="">            if user:</span><br/><span leaf="">                session[&#34;user&#34;] = user[&#34;username&#34;]</span><br/><span leaf="">                return redirect(url_for(&#34;profile&#34;))</span><br/><span leaf="">            error = &#34;Login failed.&#34;</span><br/><span leaf="">    return render_template_string(LOGIN_TEMPLATE, error=error)</span><br/><span leaf="">@app.route(&#34;/profile&#34;)</span><br/><span leaf="">def profile():</span><br/><span leaf="">    user = session.get(&#34;user&#34;)</span><br/><span leaf="">    if not user:</span><br/><span leaf="">        return redirect(url_for(&#34;login&#34;))</span><br/><span leaf="">    return render_template_string(PROFILE_TEMPLATE, user=user)</span><br/><span leaf="">@app.route(&#34;/flag&#34;)</span><br/><span leaf="">def flag():</span><br/><span leaf="">    if session.get(&#34;user&#34;) != &#34;admin&#34;:</span><br/><span leaf="">        return &#34;Admins only.\n&#34;, 403</span><br/><span leaf="">    return f&#34;{FLAG}\n&#34;</span><br/><span leaf="">@app.route(&#34;/logout&#34;)</span><br/><span leaf="">def logout():</span><br/><span leaf="">    session.clear()</span><br/><span leaf="">    return redirect(url_for(&#34;index&#34;))</span><br/><span leaf="">@app.route(&#34;/health&#34;)</span><br/><span leaf="">def health():</span><br/><span leaf="">    return {&#34;status&#34;: &#34;ok&#34;}</span><br/><span leaf="">init_db()</span><br/><span leaf="">if __name__ == &#34;__main__&#34;:</span><br/><span leaf="">    app.run(host=&#34;0.0.0.0&#34;, port=5000)</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后我们设计一个给靶场专用的CTF RL agent，他有三个模块组成，启动器，验证器，reward结算.</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">启动器</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在启动器中，我会给模型对应的目标以及工具，从而让模型完成目标，并且做了限制，最多十步，最多两次工具失败调用:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002445" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0c9a0b4b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNkefoiac6zBiboxgVjhW7xZf8eMoXR79q36uk05ORN4SjkPyibn7HTyFibpLFvj6XFbpHkskGndQUgmH1jlDiaYqGwpNWvibfHVA4lc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">验证器</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这步是验证模型是否成功拿到flag，是否真的做了某些我们需要的操作，比如有没有发login包:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002452" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=578d14a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMrPq2ANxoA5UhuHw23H9GcEzicjtvd3n3icR75Y5En2O3dWgR9o4BMuesoSickhauMvVP5PTrGpAwtr0TLbibzcJBFib68Ec6RcT3I%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">访问的时候有没有管理员权限</span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002455" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1767c61d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPT8pM9FVZ1UAqyiaLma2QBYCkBnckFaeDia7HJKAAw0FiboZRAzMTQQOvzBAFaE5V1aoGa3MNDcBa5wqbF2xnQtKq6I91m9a6Mw8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">sql注入语句对不对 或者有没有相似的语句</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002453" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=95d65614&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMFILtA2ibdia6SAB1cvw2gasYd5IMxNuaVfGdQLYAkanZSGYiaZqibre5dmYIibkaO7DYxtJqsB3YFM6gemDzC9JACeYQIaCTbQMgo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">reward结算</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我们之所以验证器做那么复杂的原因是因为如果不每一步做验证，只看拿不拿flag，我们这种弱智模型会遇到Reward Sparsity(奖励稀疏)的问题</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">如同让小学生做高考数学题，无论尝试多少次都得零分，无法通过分数差异学习改进策略。</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">因此我们必须设计好，每一步都有对应的奖励或者惩罚，防止出现模型摆烂的问题.而这个是reward结算来干的，如模型成功登录就给点分，欺骗欺诈agent扣分等。</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">没错,RL其实是猴子算法，让猴子自己打字，打出正常语句就给分，错误语句扣分，最终让猴子实现打莎士比亚全集!</span></p></blockquote><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">过程</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个过程非常有趣，因为模型一定不会走聪明路线，他会走偷懒的路线，哪条线容易就走哪个。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">首先，用大模型合成一些正确的SFT过来（大概1k，包含正确的路线和思考），混在正常的SFT里面做训练，这个是保证模型至少读过数据。然后启动这个RL AGENT:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">最开始，模型认为我们在骗他:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002459" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=35c3ede5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPjwUeuX1GJ5ZwUpBNTU5eR0B5pgsaUhHG6D9DtQ0hnqOE3ibvkN5Au2q6XJqH7ib1EaNZicJ0dLYEX8y2TsmbrktbIX7orl5Ktyc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002458" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0b97656b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPaGBicTQzjQ9cevwDM9f8K2WP59QCXnD2lC3iaUFYLDtdWNdLYGjAOMK1b9zSbQQXCrdUqE2jN5gDWSyBnYgia6ITLu9AFOOUfCM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">狠狠的扣分后，过了一个晚上，我发现模型开始上道了，认为这个是sql注入题目了</span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002465" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=d69fbaee&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVNRunicOPYYEYvKmbT84kqJMB2briaUiaQcas4GjCWSicqJA5zkL0ianr1eJ0Q13VPYMXmLDnI7pXtgqDufiawjeZQOx4CbstchVvWWI%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">并且有时候居然还会想去谷歌搜一下答案，可惜我是国内，谷歌不给你访问的:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002463" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=34d5fb3c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPib3B16EiazQKZz7mibjhJSH7ib7AUuxWGXTReOUmCb7b5g0X2jOAwQBrtxXbzH9kcibJPqE99qEhibiah4YsOPcGZlnOsRRmLFl0M1Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">再过了一个晚上后，我发现模型居然作弊了:</span></span></p><p nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002464" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=e3be2a7c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVNwmZAy7tgX5bFO80tgiaKqrxRCNFTBhqYjFsmP9Kf22VIFlicOK7un7zj57M1qQJoWjz18QIMaYbFZYJ8sG2pmK0q4icq0DyZExE%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">再过了一个晚上后，我发现模型居然作弊了:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002468" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=ab351074&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVPmlIfnc77XYzj09e3KRicWU3XGkxxeTlbYic6NHcFq6ToP8qu66lb0pKhqmTr6xawHSF0XzlHxs0joWG5F4bvdBibZdkG81fhoIU%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这是因为，这个flask后台也是可以正常登录的，而这套系统是我vibe coding出来的，默认的GPT给了一个弱口令，结果模型不知道从哪一步开始猜到了口令，开始疯狂刷分。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">回退版本并且重新设计了奖励结构后，继续放置，一天后，这个模型终于学会了sql注入，拿到了flag:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002467" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d2e67ec9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPCr0aZbontdQic406Ycn13Dp8PNLqVZmpHYNLP6d7tic06HXPtWeMUuwEibWX2yv2lEZquMFxXFfeY73PyoOduLEG2ACxRUAh9zs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002466" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9f4ef14b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMzWcCqQHMBh3jCs5dWkxvxBV0Iic84V81sqMjsH4k1LY4aN3zo5QUpXYsqica4xHgjIKRgrlV6bE1HpwLoJN2iarz0Ga28e1JA1E%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">至此，我们的训练模型之旅也结束了</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">总结</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">预训练这块坑比较多，花费也多成本也多，有条件的还是直接用别人家的base模型(已经预训练好的基座)吧，之后我也试了一下QWEN的BASE接了SFT和RL后做的真的比我的好太多了。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c1993542&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247486122%26idx%3D1%26sn%3Df2685d6fc15e014188fc141cfd7ebe31">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 05 Apr 2026 10:00:00 +0800</pubDate>
    </item>
    <item>
      <title>hypervisor AMD嵌套虚拟化</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247486042&amp;idx=1&amp;sn=3486846e6c97495bf53864d09d0e1267</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2026-03-30 10:02</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=890ad3a2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVMLz6Wuiaph2M986lIEMTrGL8kticRhCictqACxYrk8mibxMeWj5p5pryFChnOTf3SJosK0J2cDfQuQEy0jNkZRaVCTSiaOOTGqwXU8%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">这个嵌套虚拟化的项目去年就完成了,但是因为业务实在是太忙了,没什么时间写再加上这种技术文章没几个人看,现在大众更喜欢的是”爽+AI”,”简单短快+AI”这类的文章.也就一直咕咕咕了,但是全国搞CPU虚拟化的人屈指可数,而且我发现我去年搞的项目今年细节也快忘完了,写了就当存档.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">考虑到看这篇文章的人都有一定基础</span></strong><span leaf="">,故不做基础科普.</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">概念</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">要做嵌套虚拟化,我们需要了解三大概念</span></p><ul style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">L0：最底层的真实虚拟机监控器，直接控制物理硬件</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">L1：运行在 L0 上的一台虚拟机，但它自己又充当 hypervisor</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">L2：运行在 L1 里面的“下一层”虚拟机</span></p></li></ul><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我们做的是L1的角色，其实我们只需要:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">虚拟化MMIO嵌套</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">虚拟化VMexit嵌套</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">虚拟化异常/中断嵌套</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">核心做法是,我们设计一个l1用的页表/vmcb，然后分配一个l2用的页表/vmcb，当遇到l2调用vmrun的时候,把l2的vmcb提交给cpu,系统就会进入l2的工作状态。然后L2遇到vmexitt或者l1遇到vmexit的时候还是走我们的vmexit entry。虚拟化对应指令就能实现嵌套虚拟化。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">让我们一步一步来</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">MMIO嵌套</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">小工具建设</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一步我们要给L2分配好页表，我们预先在每个vcpu分配:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002364" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9ecef0b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVN2wMTUewCTTBPPA9Y5ib4FKyTUCxU26O6Uj9ytCGNrJITFfbwT7A65c4X68E7GO0xQ5Kw5e7CYJ5FC3vkHt5RU6GkUNegRjxWs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">然后我们需要一个翻译工具,要不然我们没办法访问l2的pa对应的hva:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个所谓l1-&gt;l2,l2-&gt;l1的翻译工具就是把 L1 的 gPA映射成 L0 可访问的 VA</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002365" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5a9f1bdc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPJGvhcSWx9Iicyvy7Yt011iaRgnRicQVUauAONYTjYicdIOTJDxw2jx1yh5TOKlre0tWHSrMtQjboy6ThJTOicHwrUXI5f9gdEcsN0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">有了这个工具后,剩下的就是做基本的PML4访问映射:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002367" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=42a9cca5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNK8WibpOU4gokUMOK7SYl5dCkThIfYNHwdd35MoL2CDDLTGVEY964SohiajGibrGWtlGud84icictYhRVGqEzjLibLHE18iaII20icNPU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">有了PML4访问映射工具后,我们就能正常的访问L2的内存,类似于这个:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002366" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=171b28f6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMtPaZ95Cswicav6VicemHn06RU7q3km0I9VZbCXpLVqOhrgLqUZqD0wJG3d9eq1bkmF2ocubdDPbthTbUv83MNNAOq3JVI1tbak%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">不过大部分时间我们用不上VA到PA的转换访问,这是因为,大部分情况下vmexit的都是pa地址而不是VA地址不需要走一次PML4翻译,不排除后续搞hack用的上</span></p></blockquote><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="wx_topic_link" topic-id="mnbqy8vn-a6saj4" style="color: #576B95 !important;" data-topic="1" data-recommend="">#PF处理</a></span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当出现<a class="wx_topic_link" topic-id="mnbqy8vo-2w55f6" style="color: #576B95 !important;" data-topic="1" data-recommend="">#pf的时候</a>,检查是否在guest exit里面,如果是,则进入guest 的pf而不是自己的:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">void svm_exit::svm_pf_handler(_svm_guest_status* guest_context) {</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mnbqymeu-xdziq3" style="color: #576B95 !important;" data-topic="1" data-recommend="">#ifdef</a> use_npt</span><br/><span leaf="">    //__debugbreak();</span><br/><span leaf="">    // ============ 嵌套NPT页错误处理 ============</span><br/><span leaf="">    // 如果处于嵌套guest模式且L1启用了NPT，使用嵌套NPT处理</span><br/><span leaf="">    if (guest_context-&gt;vcpu-&gt;nested_guest_mode &amp;&amp;</span><br/><span leaf="">        guest_context-&gt;vcpu-&gt;nested_npt_enabled) {</span><br/><span leaf="">        nested_npt::handle_nested_npt_page_fault(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而里面我们只需要像npt hook一样，找L2的rip和cr3,构造shadow page即可.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">大概是:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002377" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b2b01737&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOxo4rh8sQp0jhf6hUiaKSTwLstYXsjjP2WXJ6WibhCEvjeiccice2PnzvmvhpDsBY2jbn8e5qJmlvvuoYFO4ia6Q2h27JQvluCZ5Jk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">构造shadow page,并且设置vmcb.tlbc设置成刷新tlb</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002376" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=82ab77c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOoHEN4r2rRqXL0lotzKeYfkeZxrHicEQ8fK9YaTzeTKcw8CUUCzNicBkVHW8AWrWHoXnQHy8hOFfA3Rdcd49a708D6cm5IapCuE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">然后走nvmexit即可.这个nvemexit是啥玩意后文会说。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">虚拟化Vmexit</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这很好理解,之前我们会伪装主板不支持vmexit指令,现在我们可以开始对他的虚拟化。总的来说,他分几步</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">vmsave</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在vmsave阶段我们按照规范,复制当前vmsave到target上</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002378" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=75fc37bd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMEw8zWQhmjBgp3cCtwiaP0MqBJ6fxadv8DichXw4m8ohy3zR2q8RIn8X1icEPkTXicxibqeibicQyA9ia2HNufsKjK0rib4ibusWpurjLBQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">vmload</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">同理,根据amd手册,复制到当前的vmcb-&gt;state_save里面</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    // FS, GS, TR, LDTR (包括所有隐藏状态)</span><br/><span leaf="">    // KernelGsBase, STAR, LSTAR, CSTAR, SFMASK</span><br/><span leaf="">    // SYSENTER_CS, SYSENTER_ESP, SYSENTER_EIP</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002374" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=19003443&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMYEBLnTpuyTlce0KxhFxrfK8oAlUlqia1d4kico7233uLxAUAIuDDIJibHBGcEp1UgwgjFSNfylcvZm9rdtUibdBhnbKOIaqoG6V4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">vmrun</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个比较复杂,让我们翻一下amd手册,</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002375" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=48844972&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOK7PdLblzAQ01auqUiatIXB1olq13f2y1mphEvc0mx5s014CuiaTtCmTbhE42gE2eTicOjKtCbEy1TU1Y8DZDxYDZv78mNIhXuaI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">简单来说,我们先保存一下l1的guest_vmcb状态,然后给目前在用的vmcb赋值过去（也就是说,l1.vmcb = l2.vmcb)，并且标记一下进入嵌套模式(nested_guest_mode = true)</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    // RAX包含guest VMCB的物理地址</span><br/><span leaf="">    unsigned __int64 guest_vmcb_pa = guest_context-&gt;guest_register-&gt;Rax;</span><br/><span leaf="">    DebugPrint(&#34;[Nested] VMRUN with VMCB PA: %p\n&#34;, guest_vmcb_pa);</span><br/><span leaf="">    // 验证VMCB物理地址对齐(必须4KB对齐),这个地址在当前是不能直接范围的</span><br/><span leaf="">    if (guest_vmcb_pa &amp; 0xFFF) {</span><br/><span leaf="">        DebugPrint(&#34;[Nested] VMCB PA not aligned, injecting <a class="wx_topic_link" topic-id="mnbqymeu-1rfl0j" style="color: #576B95 !important;" data-topic="1" data-recommend="">#GP</a>\n&#34;);</span><br/><span leaf="">        inject_exception_gp(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span><br/><span leaf="">    _svm_vmcb* source_vmcb =</span><br/><span leaf="">        (_svm_vmcb*)map_l1_gpa_page_to_hva(guest_context-&gt;vcpu, guest_vmcb_pa);</span><br/><span leaf="">    if (!source_vmcb) {</span><br/><span leaf="">        DebugPrint(&#34;[Nested] Failed to map guest VMCB for VMRUN\n&#34;);</span><br/><span leaf="">        inject_exception_gp(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span><br/><span leaf="">    memcpy(guest_context-&gt;vcpu-&gt;l1_guest_vmcb, source_vmcb, sizeof(_svm_vmcb));</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">同时，我们的nested npt也是在这个时候初始化的</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    _svm_vmcb* l1_vmcb = guest_context-&gt;vcpu-&gt;l1_guest_vmcb;</span><br/><span leaf="">    // 初始化嵌套NPT</span><br/><span leaf="">    if (!nested_npt::init_nested_npt(guest_context-&gt;vcpu, l1_vmcb)) {</span><br/><span leaf="">        DebugPrint(&#34;[Nested] Failed to initialize nested NPT\n&#34;);</span><br/><span leaf="">        inject_exception_gp(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后把当前状态备份一下,赋值</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    memcpy(guest_context-&gt;vcpu-&gt;l2_guest_vmcb, &amp;guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb, sizeof(_svm_vmcb));</span><br/><span leaf="">    // ============ 从 L1 的 guest VMCB 恢复完整的处理器状态 ============</span><br/><span leaf="">    // 根据 AMD SVM 规范，VMRUN 指令需要从 VMCB 加载完整的 guest 状态</span><br/><span leaf="">    //dest_state-&gt;Rip = src_state-&gt;Rip;</span><br/><span leaf="">    memcpy(&amp;guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.state_save, &amp;l1_vmcb-&gt;state_save, sizeof(_vmcb_state_save_area));</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">这样做的目的是,让CPU接下来执行l2的vmcb里面的内容,自然也就进入l2的虚拟化的环境了,直到遇到vmexit.</span></strong></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">nested_vmexit</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当有新的vmexit触发,并且我们进入了嵌套模式的时候,需要判断一下L2的虚拟机是否启用了对应的vmexit:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002384" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d1db847d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNib39BudlSYPyLKSa81Oib78YjARibBPVE4SodYjpTeouGl0KOVNFTBboR0WC6znvczQOFY1yaxUJVUJj7IYNfVZ8jokbicB2WQWQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">如果启用了,走nested_vmexit，而这个函数的作用是，拷贝上下文，然后注入回l2，触发l2的vmexit。这样在l2里面做对应的vmexit操作如cpuid等乱七八糟的时候,他会再次触发l1的vmexit,从而被我们控制.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">简单来说:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">回填一下当前的vmcb(这个时候是l2的vmcb)</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    _svm_vmcb* l1_vmcb = guest_context-&gt;vcpu-&gt;l1_guest_vmcb;</span><br/><span leaf="">    if (l1_vmcb == nullptr) {</span><br/><span leaf="">        DebugPrint(&#34;[Nested] Error: L1 VMCB is null!\n&#34;);</span><br/><span leaf="">        inject_exception_gp(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span></code></pre><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">// 保存exit信息</span><br/><span leaf="">    l1_vmcb-&gt;control.ExitCode = exit_code;</span><br/><span leaf="">        l1_vmcb-&gt;control.ExitInfo1 =</span><br/><span leaf="">            guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.ExitInfo1;</span><br/><span leaf="">        l1_vmcb-&gt;control.ExitInfo2 =</span><br/><span leaf="">            guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.ExitInfo2;</span><br/><span leaf="">        l1_vmcb-&gt;control.ExitIntInfo =</span><br/><span leaf="">            guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.ExitIntInfo;</span><br/><span leaf="">    // 使用硬件在本次VMEXIT时给出的NRIP，避免在L2地址空间里手动解码指令长度</span><br/><span leaf="">    l1_vmcb-&gt;control.NRip =</span><br/><span leaf="">        guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.NRip;</span><br/><span leaf="">    //拷贝state到l1_vmcb里面</span><br/><span leaf="">    memcpy(&amp;l1_vmcb-&gt;state_save, &amp;guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.state_save, sizeof(_vmcb_state_save_area));</span><br/><span leaf="">    l1_vmcb-&gt;state_save.Rax = guest_context-&gt;guest_register-&gt;Rax;</span><br/><span leaf="">    _svm_vmcb* l1_guest_vmcb_hva =</span><br/><span leaf="">        (_svm_vmcb*)map_l1_gpa_page_to_hva(guest_context-&gt;vcpu, guest_context-&gt;vcpu-&gt;l1_guest_vmcb_pa);</span><br/><span leaf="">    if (l1_guest_vmcb_hva == nullptr) {</span><br/><span leaf="">        DebugPrint(&#34;[Nested] Failed to map L1 VMCB for nested VMEXIT writeback\n&#34;);</span><br/><span leaf="">        inject_exception_gp(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span><br/><span leaf="">    memcpy(l1_guest_vmcb_hva, l1_vmcb, sizeof(_svm_vmcb));</span></code></pre><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">这个l1_guest_vmcb_pa,不是真的l1_guest_vmcb的PA,是l1调用vm_load出来的</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">恢复之前的备份:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    // 恢复备份（回到进入L2前的L1 VMCB02）</span><br/><span leaf="">    memcpy(&amp;guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb,</span><br/><span leaf="">           guest_context-&gt;vcpu-&gt;l2_guest_vmcb,</span><br/><span leaf="">           sizeof(_svm_vmcb));</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这里有一个细节,在真实SVM上，<a class="wx_topic_link" topic-id="mnbqz2uc-irssc2" style="color: #576B95 !important;" data-topic="1" data-recommend="">#VMEXIT</a> 返回到 host 后，某些状态不会自动从 HSAVE 恢复，host 需要在 VMRUN 之后执行 VMSAVE/VMLOAD 来保存/恢复：FS/GS/TR/LDTR（含隐藏状态）、KernelGsBase、STAR/LSTAR/CSTAR/SFMASK、SYSENTER_*。我们这里会把活动 VMCB 从 L2 恢复为进入 L2 前的 L1 备份（vcpu-&gt;l2_guest_vmcb）。如果直接整块覆盖，会导致这些字段变成 L1 的，从而让后续的 VMSAVE 保存错对象，解决：在恢复 L1 备份前，先抓取 L2 的这些字段；恢复后再把字段覆写回去，让紧随其后的 L1 VMSAVE 看到的是 L2 的值。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">所以我们需要人工恢复一下</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf=""> auto* l1_state = &amp;guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.state_save;</span><br/><span leaf="">    const auto* l2_state = &amp;l2_saved_state_for_vmsave;</span><br/><span leaf="">    l1_state-&gt;FsSelector = l2_state-&gt;FsSelector;</span><br/><span leaf="">    l1_state-&gt;FsAttrib = l2_state-&gt;FsAttrib;</span><br/><span leaf="">    l1_state-&gt;FsLimit = l2_state-&gt;FsLimit;</span><br/><span leaf="">    l1_state-&gt;FsBase = l2_state-&gt;FsBase;</span><br/><span leaf="">    l1_state-&gt;GsSelector = l2_state-&gt;GsSelector;</span><br/><span leaf="">    l1_state-&gt;GsAttrib = l2_state-&gt;GsAttrib;</span><br/><span leaf="">    l1_state-&gt;GsLimit = l2_state-&gt;GsLimit;</span><br/><span leaf="">    l1_state-&gt;GsBase = l2_state-&gt;GsBase;</span><br/><span leaf="">    l1_state-&gt;TrSelector = l2_state-&gt;TrSelector;</span><br/><span leaf="">    l1_state-&gt;TrAttrib = l2_state-&gt;TrAttrib;</span><br/><span leaf="">    l1_state-&gt;TrLimit = l2_state-&gt;TrLimit;</span><br/><span leaf="">    l1_state-&gt;TrBase = l2_state-&gt;TrBase;</span><br/><span leaf="">    l1_state-&gt;LdtrSelector = l2_state-&gt;LdtrSelector;</span><br/><span leaf="">    l1_state-&gt;LdtrAttrib = l2_state-&gt;LdtrAttrib;</span><br/><span leaf="">    l1_state-&gt;LdtrLimit = l2_state-&gt;LdtrLimit;</span><br/><span leaf="">    l1_state-&gt;LdtrBase = l2_state-&gt;LdtrBase;</span><br/><span leaf="">    l1_state-&gt;KernelGsBase = l2_state-&gt;KernelGsBase;</span><br/><span leaf="">    l1_state-&gt;Star = l2_state-&gt;Star;</span><br/><span leaf="">    l1_state-&gt;LStar = l2_state-&gt;LStar;</span><br/><span leaf="">    l1_state-&gt;CStar = l2_state-&gt;CStar;</span><br/><span leaf="">    l1_state-&gt;SfMask = l2_state-&gt;SfMask;</span><br/><span leaf="">    l1_state-&gt;SysenterCs = l2_state-&gt;SysenterCs;</span><br/><span leaf="">    l1_state-&gt;SysenterEsp = l2_state-&gt;SysenterEsp;</span><br/><span leaf="">    l1_state-&gt;SysenterEip = l2_state-&gt;SysenterEip;</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后就是恢复rip，恢复npt到l1里面</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    // 恢复L0的NPT到VMCB</span><br/><span leaf="">    guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.NCr3 = guest_context-&gt;vcpu-&gt;npt_pa;</span><br/><span leaf="">    guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.TlbControl = 3;</span><br/><span leaf="">    if (guest_context-&gt;vcpu-&gt;l1_guest_vmcb) {</span><br/><span leaf="">        // 从 L2 VMEXIT 返回到 L1 host：应继续执行 L1 的 VMRUN 下一条指令。</span><br/><span leaf="">        // 更可靠的来源是：L0 当初拦截到 L1 的 VMRUN 时硬件给出的 NRIP。</span><br/><span leaf="">        // 该值在 handle_vmrun 中保存到 l1_vmrun_return_rip。</span><br/><span leaf="">        uintptr_t resume_rip = guest_context-&gt;vcpu-&gt;l1_vmrun_return_rip;</span><br/><span leaf="">        if (resume_rip == 0) {</span><br/><span leaf="">            // 兼容旧路径：使用进入 L2 前备份的 VMCB02.control.NRip。</span><br/><span leaf="">            resume_rip = guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.control.NRip;</span><br/><span leaf="">        }</span><br/><span leaf="">        if (resume_rip == 0) {</span><br/><span leaf="">            resume_rip = guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.state_save.Rip;</span><br/><span leaf="">            DebugPrint(&#34;[Nested] Warning: L1 resume RIP is zero, fallback RIP %p\n&#34;,</span><br/><span leaf="">                       resume_rip);</span><br/><span leaf="">        }</span><br/><span leaf="">        guest_context-&gt;vcpu-&gt;stack-&gt;guest_vmcb.state_save.Rip = resume_rip;</span><br/><span leaf="">    } else {</span><br/><span leaf="">        inject_exception_gp(guest_context);</span><br/><span leaf="">        return;</span><br/><span leaf="">    }</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后rax指向guest_vmcb pa即可</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    guest_context-&gt;guest_register-&gt;Rax = guest_context-&gt;vcpu-&gt;l1_guest_vmcb_pa;</span></code></pre><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结果</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">跟simplesvm嵌套：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002385" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ca7b1aee&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMnibML0BdWZxgj66MY0FDpM0flLt4MicPpS4dWJhGkbgCLjA6Y11bbmUbeLmVc0HWHvYhHoHnricI5fj7e70bf2GP2wFXHf4gdT8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">simplesvm的vmexit:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002383" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3c243d98&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVODcUucmwEq4AdK0XDfNIibarPAo6uIOhNwdjJJ7XEFAw7agXhow94ZjzEQFOLj3sr0X6eJ36fkqiaDXvpFNGBpBxaibRAUYpsnsY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002386" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=7b34d6e3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVOibRhib0lQRPngbc8MwNwesMYJzc0BcMs6cKsF0UI7GpGXPQ0WYMBSL68l1jootUOqfTgjjToqsibO7g3CuBQAfsZUjSGvJRuA1k%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=52756263&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247486042%26idx%3D1%26sn%3D3486846e6c97495bf53864d09d0e1267">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 30 Mar 2026 10:02:00 +0800</pubDate>
    </item>
    <item>
      <title>从0开始开发VT调试器（二）</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485990&amp;idx=1&amp;sn=8b48a6c24677302fcddab9fd4dfdea46</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>CrazyHarb</span> <span>2026-03-29 10:01</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=59163740&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVMibibrOSsUtzveEVPqLUfIcianbnOmcN0u6ibtibosKboYHmEDdrZazMib50zibzNZtBFacfF7rzUnq1gly9Tp4S0aMwickn1ggx9H7VQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="margin-top:24.0pt;margin-bottom:24.0pt;margin-left:0.0pt;line-height:120%;"><span style="font-size:26.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">从0开始开发VT调试器（二）</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_0;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">背景：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">上一章中，我们完成了基础的VT环境搭建，我们已经可以从guest中拦截一些简单的指令跳转到host了，本期我们加快速度将对调试链路进行进一步编写</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_1;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">原理：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">在Ring3层，我们经常会用到各种调试工具，例如vs、x64dbg等，他们的单步原理基本上就是两种异常——#DB、#BP，这两种异常在触发时（其实所有异常都会这么走），会触发IDT表中的1号中断和3号中断，中断触发后，会先触发调试器，也就是windbg、x64dbg等(First Chance); 如果调试器未处理，会自动分发到触发异常的进程的ntdll的RtlDispatchException，最后如果进程没有处理，会再次触发Ring3调试器</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们简单画一下异常处理的流程图，即：</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.653125" data-w="1280" style="width:552.010009765625px;height:360.010009765625px;" src="https://wechat2rss.xlab.app/img-proxy/?k=0ea28691&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVOPUU44ick5v8kibHnN6XE7DGniacggrxnrvocp4Obr6oCSsyibfXpsmGyewYjibYbicJmHWadoib4UWt63icTgHpHrCJj2Lyg4byAZsJo%2F640%3Fwx_fmt%3Djpeg"/></span></span><o:page></o:page></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_2;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VT下的异常流程:</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">通过原理已知在Ring3进程触发异常时，首先会通过触发#DB #BP，然后借助IDT进入windows内核，这便是我们可以触发VT调试的点，即，当触发#DB #BP时，VT host会接管异常，并分发到我们自己的调试器，当调试器处理完成后，VT负责注入异常或者继续执行</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.315625" data-w="1280" style="width:552.010009765625px;height:174.0px;" src="https://wechat2rss.xlab.app/img-proxy/?k=193e5d72&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVNuyrN3ThWJhWaQ5eGdQGwCEeic0YPSwbBHudwg4ejMsqNVBhlnjfWE7wdFlbJpsqdf4LticN7lMiajV7r7aomrW6t85MXZYicUsEA%2F640%3Fwx_fmt%3Djpeg"/></span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_3;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">代码修改：</span></span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_4;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">1. </span></span></span><span style="mso-bookmark:heading_4;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Exception map</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">首先，我们找到setup_vmcs中的针对_vt_vmcs_exceptionbitmap的写入值，这个字段主要的作用是它记录的值中如果某一位为1，那么当idt触发对应的中断时，会进入vt host，例如当#DB触发时，如果_vt_vmcs_exceptionbitmap的值为 1 &lt;&lt; 1，那么#DB会进入VT的host的代码中，这里我们把exception_map的值改为 1 &lt;&lt; 1</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">uintptr_t exception_bitmap = 1 &lt;&lt; 1;                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_exceptionbitmap, exception_bitmap);</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><o:page></o:page></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_5;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">2. </span></span></span><span style="mso-bookmark:heading_5;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VT处理异常代码</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们在代码中需要对_vt_exitreason_exceptionornmi进行处理，即vt_vmm_handleexception函数，在该函数中，我们需要对#DB进行判断，并打印一条日志，并按原属性进行注入事件，在我们修改的代码中可以看到，判断了type(Hardware)和vector(#DB)，这个type和vector是一一对应的，具体值需要参考intel的手册，这里就不再展开了</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void vt_vmm_handleexception(_vt_vmhandle_guestcontext* guest_context) {                  </span><span leaf=""><br/></span><span leaf="">size_t exit_exception_value = 0;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_vmexitintrinfo, &amp;exit_exception_value);                  </span><span leaf=""><br/></span><span leaf="">const _vt_vmexit_interruptioninformationfield exception = { exit_exception_value };                  </span><span leaf=""><br/></span><span leaf="">const _vt_interruption_type interruption_type = (_vt_interruption_type)(exception.fields.interruption_type);                  </span><span leaf=""><br/></span><span leaf="">const _vt_interruption_vector vector = (_vt_interruption_vector)(exception.fields.vector);                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR guest_inst_length;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_vmexitinstructionlen, &amp;guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR error_code = 0;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((ULONG32)_vt_vmcs_field::_vt_vmcs_vmexitintrerrorcode, &amp;error_code);                  </span><span leaf=""><br/></span><span leaf="">if (interruption_type == _vt_interruption_type::_vt_interruption_hardwareexception) {                  </span><span leaf=""><br/></span><span leaf="">// Hardware exception                  </span><span leaf=""><br/></span><span leaf="">if (vector == _vt_interruption_vector::_vt_intteruptionvec_debugexception)                  </span><span leaf=""><br/></span><span leaf="">{                  </span><span leaf=""><br/></span><span leaf="">DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, &#34;GetInt1 %p\n&#34;, PsGetCurrentProcessId());                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(_vt_interruption_type::_vt_interruption_hardwareexception, vector, exception.fields.error_code_valid, error_code);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_vmentryinstructionlen, guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(interruption_type, vector, exception.fields.error_code_valid, error_code);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_vmentryinstructionlen, guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(interruption_type, vector, exception.fields.error_code_valid, error_code);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_vmentryinstructionlen, guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_6;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">3. </span></span></span><span style="mso-bookmark:heading_6;"><span style="font-size:16.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">代码测试</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们将驱动在测试环境中加载起来，此时我们需要触发#DB，才能在驱动的输出中看是否拦截到了，所以，在这里需要打开调试器对文件进行单步，笔者使用了x64dbg对一个exe进行调试，可以看到，笔者单步两次后，debug中是可以打印出对应的日志的，证明此时host拦截到正确的数据了</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.6430379746835443" data-w="1185" style="width:552.010009765625px;height:354.010009765625px;" src="https://wechat2rss.xlab.app/img-proxy/?k=a5c64012&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNY9fiajLzdMnIhia1b6ztwZBHs9TaUCENtEfB3bU4IN9FlDafUK2bXprO74C7tz7qG34gRKdgAGzC2iciapiaTSVtyTuN250CtmRBY%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_7;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Guest代码转向</span></span></span><o:page></o:page></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">现在，我们开始编写guest代码，guest的流程主要为，host注入guest转向，guest代码跳转到我们自己的stub上，stub最后触发host处理，最后host恢复环境，然后ring3继续执行，这里触发host处理，我们用vmcall指令即可</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">首先，我们在汇编中添加：</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">asm_dbg_entry proc                  </span><span leaf=""><br/></span><span leaf="">mov rcx, 1340h                  </span><span leaf=""><br/></span><span leaf="">vmcall                  </span><span leaf=""><br/></span><span leaf="">int 3 ;不该执行到这里                  </span><span leaf=""><br/></span><span leaf="">asm_dbg_entry endp</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">其次，我们在#DB中添加注入RIP的代码</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">....                  </span><span leaf=""><br/></span><span leaf="">   if (interruption_type == _vt_interruption_type::_vt_interruption_hardwareexception) {                  </span><span leaf=""><br/></span><span leaf="">// Hardware exception                  </span><span leaf=""><br/></span><span leaf="">if (vector == _vt_interruption_vector::_vt_intteruptionvec_debugexception)                  </span><span leaf=""><br/></span><span leaf="">{                  </span><span leaf=""><br/></span><span leaf="">DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, &#34;GetInt1 %p\n&#34;, PsGetCurrentProcessId());                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestrip, (ULONG_PTR)&amp;asm_dbg_entry);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(interruption_type, vector, exception.fields.error_code_valid, error_code);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_vmentryinstructionlen, guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_8;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">KVA功能的影响</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">在注入代码后，我们需要考虑的一个问题，就是KVA的问题，如果windows启动了KVA，那么我们还需要更改cr3到kernel态下的CR3，毕竟shadow Cr3只有当前进程的ring3地址，以及ntkernel中的.KVSCode段的地址，我们的驱动不在这个段中，所以需要切CR3；如果没有开启，那么就不需要切了，可以用下面的ps脚本进行判断</span></span><o:page></o:page></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">Install-Module SpeculationControl -Force                  </span><span leaf=""><br/></span><span leaf="">Import-Module SpeculationControl                  </span><span leaf=""><br/></span><span leaf="">Get-SpeculationControlSettings</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">笔者的电脑，执行后发现没有开启KVA，查阅相关资料发现在最新的CPU上，已经修复了这个漏洞，所以，windows不再开启了</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.7710557532621589" data-w="843" style="width:552.010009765625px;height:425.010009765625px;" src="https://wechat2rss.xlab.app/img-proxy/?k=a04b8be6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOBOmCS0K6ttvPZQvr8pv7eibw6COmzS1iafQibZ1rkJEZqff8Rjv9KENgkY1lAxq9Bfp3gucjL1nDXBjYL2iac65crCOB316uV3GQ%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_9;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">需要保留的寄存器：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">以上的代码展示了核心部分，但不是完整流程，因为在vmcall后，host需要恢复现场内容，所以需要将现场数据进行保存</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_10;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">1. </span></span></span><span style="mso-bookmark:heading_10;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">eflags寄存器</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">该寄存器必然会被修改，因为至少tf位会被置为0，否则当注入guest后，会再次触发#DB，最后走入异常状态，我们根据Intel手册中对eflags的描述，我们将Eflags置为2，原始值保存</span></span><o:page></o:page></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_11;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">2. </span></span></span><span style="mso-bookmark:heading_11;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">DR寄存器</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">和eflags的理由相同，当启动Dr时，如果地址被ring3精心构造，那么我们会在stub的某个地方触发#DB异常，导致异常状态，我们把Dr7改为0x400，屏蔽掉其他的Dr寄存器，避免触发</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_12;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">3. </span></span></span><span style="mso-bookmark:heading_12;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Guest context寄存器</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">包含cs和ss、rip、rsp、rcx，为了在vmcall的时候直接恢复，所以这几个段需要保存，这里可能会有读者有些疑问，为什么rcx也需要保存呢？因为我们在再次进入host时，用的vmcall，为了判断编号，所以用的时rcx，所以这个rcx是需要保存的</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_13;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">4. </span></span></span><span style="mso-bookmark:heading_13;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">guest_exceptionreason、error_code、指令长度等</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这些都和guest注入异常有关系，所以也需要进行保存，这样可以避免后续未处理时，注入错了异常</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们总结一下整体的结构</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">struct DBG_Stack {                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR Dr7;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR guest_inst_length;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR exception_type;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR exception_vector;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR csbase;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR cslimit;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR csselector;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR ssselector;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR csarbytes;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR ssbase;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR sslimit;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR ssarbytes;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR ip;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR eflags;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR sp;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR original_rcx;                  </span><span leaf=""><br/></span><span leaf="">};</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_14;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">申请并填充栈</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">为了保存我们需要的数据，我们需要将我们的数据保存在栈上，并为了避免返回Ring3的时候，Ring3找到相关的数据，所以我们需要自己申请一块地址，保存context</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">PHYSICAL_ADDRESS phys = { 0 };                  </span><span leaf=""><br/></span><span leaf="">phys.QuadPart = ~0ULL;                  </span><span leaf=""><br/></span><span leaf="">auto stack = (ULONG_PTR)MmAllocateContiguousMemory(PAGE_SIZE, phys);                  </span><span leaf=""><br/></span><span leaf="">DBG_Stack* guest_stack = (DBG_Stack*)(stack + PAGE_SIZE - sizeof(DBG_Stack));                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestdr7, &amp;guest_stack-&gt;Dr7);                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;guest_inst_length = guest_inst_length;                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;exception_type = (ULONG_PTR)interruption_type;                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;exception_vector = (ULONG_PTR)vector;                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;ip = (ULONG_PTR)guest_context-&gt;ip;                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;eflags = guest_context-&gt;flag_reg.all;                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;sp = (ULONG_PTR)guest_context-&gt;stack-&gt;gp_regs.Rsp;                  </span><span leaf=""><br/></span><span leaf="">guest_stack-&gt;original_rcx = guest_context-&gt;stack-&gt;gp_regs.Rcx;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestcsbase, &amp;guest_stack-&gt;csbase);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestssbase, &amp;guest_stack-&gt;ssbase);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestcsarbytes, &amp;guest_stack-&gt;csarbytes);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestssarbytes, &amp;guest_stack-&gt;ssarbytes);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestcslimit, &amp;guest_stack-&gt;cslimit);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestsslimit, &amp;guest_stack-&gt;sslimit);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestcsselector, &amp;guest_stack-&gt;csselector);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestssselector, &amp;guest_stack-&gt;ssselector);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_guestdr7, &amp;guest_stack-&gt;Dr7);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcsselector, asm_readcs());                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestssselector, asm_readss());                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcsarbytes, vmx_getsegment_accessright(asm_readcs()));                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestssarbytes, vmx_getsegment_accessright(asm_readss()));                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcslimit, __segmentlimit(asm_readcs()));                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestsslimit, __segmentlimit(asm_readss()));                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestdr7, 0x400);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestrflags, 2);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestrsp, (ULONG_PTR)guest_stack);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestrip, (ULONG_PTR)&amp;asm_dbg_entry);</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_15;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VMCALL代码的实现：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">首先，我们先针对VMACALL做一下接管，之前的逻辑是直接注入GP异常，现在不需要了</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void vt_vmm_handlevmexit(_vt_vmhandle_guestcontext* guest_context) {                  </span><span leaf=""><br/></span><span leaf="">....                  </span><span leaf=""><br/></span><span leaf="">case _vt_vmx_exitreason::_vt_exitreason_vmcall:                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_handle_vmcall(guest_context);                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">   }</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><o:page></o:page></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们开始继续封装handle_vmcall函数，当得到rcx为0x1340时，我们直接注入系统异常，后续ring0、ring3的调试器就可以接到内容了</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">#define vmcall_db_dispatch_system 0x1340                  </span><span leaf=""><br/></span><span leaf="">void vt_vmm_handle_vmcall(_vt_vmhandle_guestcontext* guest_context) {                  </span><span leaf=""><br/></span><span leaf="">const auto hypercall_number = guest_context-&gt;stack-&gt;gp_regs.Rcx;                  </span><span leaf=""><br/></span><span leaf="">switch (hypercall_number) {                  </span><span leaf=""><br/></span><span leaf="">case vmcall_db_dispatch_system:                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_handle_DB_exception(guest_context, guest_context-&gt;stack-&gt;gp_regs.Rsp, true);                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">default:                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们继续封装vt_vmm_handle_DB_exception用于处理相关逻辑，其中封装了一个vt_vmm_restore_context函数，用于处理堆栈上的数据恢复guest的状态，段、栈、ip、flags、原始rcx等</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void vt_vmm_restore_context(_vt_vmhandle_guestcontext* guest_context, ULONG_PTR guestRsp, bool dispatch_into_system, ULONG_PTR&amp; exception_reason, ULONG_PTR&amp; error_code) {                  </span><span leaf=""><br/></span><span leaf="">DBG_Stack* dbgFrame = (DBG_Stack*)guestRsp;                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rcx = dbgFrame-&gt;original_rcx;                  </span><span leaf=""><br/></span><span leaf="">exception_reason = (ULONG_PTR)dbgFrame-&gt;exception_type;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_guestrip, (ULONG_PTR)dbgFrame-&gt;ip);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_guestcsselector, (ULONG_PTR)dbgFrame-&gt;csselector);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_guestrflags, (ULONG_PTR)dbgFrame-&gt;eflags);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_guestrsp, (ULONG_PTR)dbgFrame-&gt;sp);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_guestssselector, (ULONG_PTR)dbgFrame-&gt;ssselector);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_vmentryinstructionlen, dbgFrame-&gt;guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestdr7, dbgFrame-&gt;Dr7);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestcslimit, dbgFrame-&gt;cslimit);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestcsarbytes, dbgFrame-&gt;csarbytes);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestsslimit, dbgFrame-&gt;sslimit);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestssarbytes, dbgFrame-&gt;ssarbytes);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestcsbase, dbgFrame-&gt;csbase);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_guestssbase, dbgFrame-&gt;ssbase);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">void vt_vmm_handle_DB_exception(_vt_vmhandle_guestcontext* guest_context, ULONG_PTR guestRsp, bool inject_into_system) {                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR excetpion_reason;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR error_code;                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_restore_context(guest_context, guestRsp, inject_into_system, excetpion_reason, error_code);                  </span><span leaf=""><br/></span><span leaf="">if (inject_into_system)                  </span><span leaf=""><br/></span><span leaf="">{                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(_vt_interruption_type::_vt_interruption_hardwareexception, _vt_interruption_vector::_vt_intteruptionvec_debugexception, false, error_code);                  </span><span leaf=""><br/></span><span leaf="">DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, &#34;vt_vmm_handle_DB_exception\n&#34;);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_16;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">运行效果：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们加载驱动后，打开x64dbg，并开始调试任意exe，我们在代码中，接到#DB异常时，打印了一条GetInt，在vmcall恢复的时候，打印了一条vt_vmm_handle_DB_exception，我们在x64dbg下执行两次单步后，发现windbg中日志已经可以正常打印了，切x64dbg下一切正常，没有任何的调试问题，我们再执行两次，发现rcx也是没有被变动的，证明，本次代码改动已经完成了</span></span><o:page></o:page></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.5021186440677966" data-w="1416" style="width:552.010009765625px;height:277.0px;" src="https://wechat2rss.xlab.app/img-proxy/?k=bb4c37c3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVP8TUoxvFt49mPoju3fnNXa2Uo4M5LWt6fKIFHkLlA2QG45KT9jwpUG4ES7tcHQQ7N6FewqbicTD1A5PTnGqH4sGybeRebcIdaA%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_17;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">工程代码：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://git.key08.com/CrazyHarb/VirtualizeDBG" target="_blank">https://git.key08.com/CrazyHarb/VirtualizeDBG</a> v0.0.2</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><o:page></o:page></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=87d4d6e5&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485990%26idx%3D1%26sn%3D8b48a6c24677302fcddab9fd4dfdea46">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 29 Mar 2026 10:01:00 +0800</pubDate>
    </item>
    <item>
      <title>从0开始开发VT调试器（一）</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485989&amp;idx=1&amp;sn=244f30b755ffa00e6cfcd7898c9a81d9</link>
      <description>从0开始开发VT调试器（一）背景：      这个项目其实很早就想写了，但一直没有机会，最近忙里偷闲赶紧写一下</description>
      <content:encoded><![CDATA[<p>原创 <span>CrazyHarb</span> <span>2026-03-28 10:01</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=fd27963d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2F1woCcbOsjVN2qGhqqick9C4Sicj2aGqy7FlKFicLiaO5MVC7npUIutpy82xGbDcjzzg3co85H2Endh5lR6lVKQOLt0AHJPAMl33lfGlBQm4MicP4%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>从0开始开发VT调试器（一）背景：      这个项目其实很早就想写了，但一直没有机会，最近忙里偷闲赶紧写一下</p>
  <p style="margin-top:24.0pt;margin-bottom:24.0pt;margin-left:0.0pt;line-height:120%;"><span style="font-size:26.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">从0开始开发VT调试器（一）</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_0;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">背景：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这个项目其实很早就想写了，但一直没有机会，最近忙里偷闲赶紧写一下，目前相关的中文资料不多，所以也当记录一下，避免未来自己也遗忘了。本文</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">不会</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">完成一个完全可用的调试器，仅做技术验证VT调试的链路不会涉及EPT等其他功能，及抛砖引玉供大家讨论，内容有瑕疵的地方，请帮忙指出。</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">既然是VT调试器，那么必然少不了虚拟化相关的代码，我们就先从虚拟化开始吧！之前已经有相关的资料如何进入虚拟化，各位可以先参考一下下面的参考资料</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://mp.weixin.qq.com/s/PVIkx0FDnZzo5idM3-NSSg" target="_blank">https://mp.weixin.qq.com/s/PVIkx0FDnZzo5idM3-NSSg</a> (huoji:《国庆专题: 深度了解”核晶“的工作原理并且手动实现一个自己的&#34;核晶&#34;》)</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://mp.weixin.qq.com/s/nIovO0W8QW2YemZ5HCYkQg" target="_blank">https://mp.weixin.qq.com/s/nIovO0W8QW2YemZ5HCYkQg</a> (手工编写linux下的intel虚拟化驱动)</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://mp.weixin.qq.com/s/mowc1iUJ1F2QghdyWgrrjw" target="_blank">https://mp.weixin.qq.com/s/mowc1iUJ1F2QghdyWgrrjw</a> (手工编写linux下的intel虚拟化驱动(二))</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://mp.weixin.qq.com/s/a39NgPrKgk2wQNMD8nj5YA" target="_blank">https://mp.weixin.qq.com/s/a39NgPrKgk2wQNMD8nj5YA</a> (INTEL CPU虚拟化特性研究&amp;初探 (三))</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://github.com/CrazyHarb/VmxProject" target="_blank">https://github.com/CrazyHarb/VmxProject</a> (linux下简易VT源码)</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">接下来，在正式的代码处理前，我们本章节将对VT进行简易回顾，简单的讲一下进入VT的代码</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_1;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">环境配置：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">vs2022 + WDK + vmware + windbg</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这里就不再赘述了，按照网上的来就可以了，实在不行就问AI也行，我们直接进入代码编写吧</span></span><o:page></o:page></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_2;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VMX环境支持检测：</span></span></span></p><p style="mso-list:l0 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">Cpuid 1号功能的vmx位</span></span></p><p style="mso-list:l1 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">Msr的ia32_msr_vmx_basic功能，判断memory_type</span></span></p><p style="mso-list:l2 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">Msr的ia32_msr_feature_control lock位及enable_vmxon位</span></span></p><p style="mso-list:l3 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">Msr ia32_msr_vmx_ept_vpid_cap功能，判断是否支持EPT</span></span></p><p style="mso-list:l4 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">具体的结构大家可以参考前面的文章，这就不再赘述了</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Java                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">bool set_feature_control_lockbits() {                  </span><span leaf=""><br/></span><span leaf="">for (unsigned iter = 0; iter &lt; KeQueryActiveProcessorCountEx(ALL_PROCESSOR_GROUPS); iter++) {                  </span><span leaf=""><br/></span><span leaf="">PROCESSOR_NUMBER processor_number;                  </span><span leaf=""><br/></span><span leaf="">GROUP_AFFINITY affinity, old_affinity;                  </span><span leaf=""><br/></span><span leaf="">KeGetProcessorNumberFromIndex(iter, &amp;processor_number);                  </span><span leaf=""><br/></span><span leaf="">RtlSecureZeroMemory(&amp;affinity, sizeof(GROUP_AFFINITY));                  </span><span leaf=""><br/></span><span leaf="">affinity.Group = processor_number.Group;                  </span><span leaf=""><br/></span><span leaf="">affinity.Mask = (KAFFINITY)1 &lt;&lt; processor_number.Number;                  </span><span leaf=""><br/></span><span leaf="">KeSetSystemGroupAffinityThread(&amp;affinity, &amp;old_affinity);                  </span><span leaf=""><br/></span><span leaf="">_ia32_feature_control_msr vmx_feature_control = {                  </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_feature_control) };                  </span><span leaf=""><br/></span><span leaf="">if (vmx_feature_control.fields.lock == false) {                  </span><span leaf=""><br/></span><span leaf="">vmx_feature_control.fields.lock = true;                  </span><span leaf=""><br/></span><span leaf="">__writemsr(ia32_msr_feature_control,                  </span><span leaf=""><br/></span><span leaf="">vmx_feature_control.all);                  </span><span leaf=""><br/></span><span leaf="">vmx_feature_control.all =                  </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_feature_control);                  </span><span leaf=""><br/></span><span leaf="">if (vmx_feature_control.fields.lock == false) {                  </span><span leaf=""><br/></span><span leaf="">DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, &#34;[VirtualizeDBG] can&#39;t set lockbit in %d \n&#34;, iter);                  </span><span leaf=""><br/></span><span leaf="">return false;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">KeRevertToUserGroupAffinityThread(&amp;old_affinity);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">return true;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">bool issupportept() {                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmxeptvpidcap_msr vmx_eptvpidcap_msr = {                  </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_vmx_ept_vpid_cap) };                  </span><span leaf=""><br/></span><span leaf="">if (!vmx_eptvpidcap_msr.fields.support_page_walk_length4 ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_write_back_memory_type ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_invept ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_single_context_invept ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_all_context_invept ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_invvpid ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_individual_address_invvpid ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_single_context_invvpid ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_all_context_invvpid ||                  </span><span leaf=""><br/></span><span leaf="">!vmx_eptvpidcap_msr.fields.support_single_context_retaining_globals_invvpid) {                  </span><span leaf=""><br/></span><span leaf="">DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, &#34;EPT Setting: %p \n&#34;, (ULONG64)vmx_eptvpidcap_msr.all);                  </span><span leaf=""><br/></span><span leaf="">return false;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">return true;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">bool checkVMXFeature() {                  </span><span leaf=""><br/></span><span leaf="">int registers[4];                  </span><span leaf=""><br/></span><span leaf="">__cpuidex(registers, 1, 0);                  </span><span leaf=""><br/></span><span leaf="">bool result = false;                  </span><span leaf=""><br/></span><span leaf="">do {                  </span><span leaf=""><br/></span><span leaf="">_vt_cpu_features cpu_features = { static_cast</span><ulong32><span leaf="">(registers[2]) };          </span><span leaf=""><br/></span><span leaf="">if (!cpu_features.fields.vmx) {          </span><span leaf=""><br/></span><span leaf="">break;          </span><span leaf=""><br/></span><span leaf="">}          </span><span leaf=""><br/></span><span leaf="">_ia32_vmbasic_msr vmx_basic_msr = { __readmsr(ia32_msr_vmx_basic) };          </span><span leaf=""><br/></span><span leaf="">if ((_ia32_memory_type)vmx_basic_msr.fields.memory_type !=          </span><span leaf=""><br/></span><span leaf="">_ia32_memory_type::write_back) {          </span><span leaf=""><br/></span><span leaf="">break;          </span><span leaf=""><br/></span><span leaf="">}          </span><span leaf=""><br/></span><span leaf="">_ia32_feature_control_msr vmx_feature_control = {          </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_feature_control) };          </span><span leaf=""><br/></span><span leaf="">if (!vmx_feature_control.fields.lock) {          </span><span leaf=""><br/></span><span leaf="">bool status = set_feature_control_lockbits();          </span><span leaf=""><br/></span><span leaf="">if (!status) {          </span><span leaf=""><br/></span><span leaf="">break;          </span><span leaf=""><br/></span><span leaf="">}          </span><span leaf=""><br/></span><span leaf="">}          </span><span leaf=""><br/></span><span leaf="">if (!vmx_feature_control.fields.enable_vmxon) {          </span><span leaf=""><br/></span><span leaf="">break;          </span><span leaf=""><br/></span><span leaf="">}          </span><span leaf=""><br/></span><span leaf="">if (!issupportept()) {          </span><span leaf=""><br/></span><span leaf="">break;          </span><span leaf=""><br/></span><span leaf="">}          </span><span leaf=""><br/></span><span leaf="">result = true;          </span><span leaf=""><br/></span><span leaf="">} while (false);          </span><span leaf=""><br/></span><span leaf="">return result;          </span><span leaf=""><br/></span><span leaf="">}</span></ulong32></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_3;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">虚拟化环境初始化：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">在进入虚拟化之前，我们需要对vmcs进行初始化，配置host、guest环境后再进入host</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_4;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">1. </span></span></span><span style="mso-bookmark:heading_4;"><span style="font-size:16.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">首先我们开启vmx的Crx标志位</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void enable_vmx() {                  </span><span leaf=""><br/></span><span leaf="">uintptr_t cr0 = __readcr0();                  </span><span leaf=""><br/></span><span leaf="">uintptr_t cr4 = __readcr4();                  </span><span leaf=""><br/></span><span leaf="">cr0 |= __readmsr(ia32_msr_vmx_cr0_fixed0);                  </span><span leaf=""><br/></span><span leaf="">cr0 &amp;= __readmsr(ia32_msr_vmx_cr0_fixed1);                  </span><span leaf=""><br/></span><span leaf="">cr4 |= __readmsr(ia32_msr_vmx_cr4_fixed0);                  </span><span leaf=""><br/></span><span leaf="">cr4 &amp;= __readmsr(ia32_msr_vmx_cr4_fixed1);                  </span><span leaf=""><br/></span><span leaf="">__writecr0(cr0);                  </span><span leaf=""><br/></span><span leaf="">__writecr4(cr4);                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_5;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">2. </span></span></span><span style="mso-bookmark:heading_5;"><span style="font-size:16.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">分配栈、vmcs、vmxon空间</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">栈空间我们定义为0x6000大小，剩下两个定义为0x1000，并对头写入标志位即可，栈空间主要是为了我们进入host时，供CPU使用</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void init_vmxon(_vt_vcpu_context* vcpu) {                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmbasic_msr vmx_basic = {                  </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_vmx_basic) };                  </span><span leaf=""><br/></span><span leaf="">PHYSICAL_ADDRESS phys = { 0 };                  </span><span leaf=""><br/></span><span leaf="">phys.QuadPart = ~0ULL;                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;vmxon = (__vt_vmcs_t*)MmAllocateContiguousMemory(PAGE_SIZE, phys);                  </span><span leaf=""><br/></span><span leaf="">RtlZeroMemory(vcpu-&gt;vmxon, PAGE_SIZE);                  </span><span leaf=""><br/></span><span leaf="">auto mmPhyAddress = MmGetPhysicalAddress((PVOID)vcpu-&gt;vmxon);                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;vmxon_physical = mmPhyAddress.QuadPart;                  </span><span leaf=""><br/></span><span leaf="">if (!vcpu-&gt;vmxon_physical) {                  </span><span leaf=""><br/></span><span leaf="">return;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;vmxon-&gt;header.all = vmx_basic.fields.revision_identifier;                  </span><span leaf=""><br/></span><span leaf="">// function                  </span><span leaf=""><br/></span><span leaf="">if (__vmx_on((unsigned long long*) &amp; vcpu-&gt;vmxon_physical)) {                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">void init_vmxcs(_vt_vcpu_context* vcpu) {                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmbasic_msr vmx_basic = {                  </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_vmx_basic) };                  </span><span leaf=""><br/></span><span leaf="">PHYSICAL_ADDRESS phys = { 0 };                  </span><span leaf=""><br/></span><span leaf="">phys.QuadPart = ~0ULL;                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;vmcs = (__vt_vmcs_t*)MmAllocateContiguousMemory(PAGE_SIZE, phys);                  </span><span leaf=""><br/></span><span leaf="">RtlZeroMemory(vcpu-&gt;vmcs, PAGE_SIZE);                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;stack = (void*)MmAllocateContiguousMemory(kernel_stack_szie, phys);                  </span><span leaf=""><br/></span><span leaf="">auto mmPhyAddress = MmGetPhysicalAddress((PVOID)vcpu-&gt;vmcs);                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;vmcs_physical = mmPhyAddress.QuadPart;                  </span><span leaf=""><br/></span><span leaf="">vcpu-&gt;vmcs-&gt;header.all = vmx_basic.fields.revision_identifier;                  </span><span leaf=""><br/></span><span leaf="">if (__vmx_vmclear((unsigned long long*) &amp; vcpu-&gt;vmcs_physical)) {                  </span><span leaf=""><br/></span><span leaf="">return;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">if (__vmx_vmptrld((unsigned long long*) &amp; vcpu-&gt;vmcs_physical)) {                  </span><span leaf=""><br/></span><span leaf="">return;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">return;                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_6;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">3. </span></span></span><span style="mso-bookmark:heading_6;"><span style="font-size:16.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">初始化vmcs内容</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这里简单讲一下主要就是将vmcs中的数据进行填入，包括guest和host，我们直接上代码，由于篇幅有限，这里不再展开各个字段的含义，如果有需要进一步了解，可以参考上面的几个链接，或者intel手册</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void setup_vmcs(uintptr_t guest_stack_pointer, uintptr_t guest_instruction_pointer, _vt_vcpu_context* vcpu) {                  </span><span leaf=""><br/></span><span leaf="">__pseudo_descriptor_64_t gdtr, idtr;                  </span><span leaf=""><br/></span><span leaf="">_sgdt(&amp;gdtr);                  </span><span leaf=""><br/></span><span leaf="">__sidt(&amp;idtr);                  </span><span leaf=""><br/></span><span leaf="">//asm_lidt(&amp;vcpu-&gt;idtr);                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmbasic_msr vmx_basic_msr = {                  </span><span leaf=""><br/></span><span leaf="">__readmsr(ia32_msr_vmx_basic) };                  </span><span leaf=""><br/></span><span leaf="">ULONG use_true_msrs = vmx_basic_msr.fields.vmx_capability_hint;                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_vmentry_controls vm_entryctl_requested = { 0 };                  </span><span leaf=""><br/></span><span leaf="">//vm_entryctl_requested.fields.load_debug_controls = true;                  </span><span leaf=""><br/></span><span leaf="">vm_entryctl_requested.fields.ia32e_mode_guest = true;                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_vmentry_controls vm_entryctl;                  </span><span leaf=""><br/></span><span leaf="">vm_entryctl.all = vmx_adjust_controlvalue(                  </span><span leaf=""><br/></span><span leaf="">use_true_msrs ? ia32_msr_vmx_true_entry_ctrl : ia32_msr_vmx_entry_ctrl,                  </span><span leaf=""><br/></span><span leaf="">vm_entryctl_requested.all);                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_vmexit_controls vm_exitctl_requested = { 0 };                  </span><span leaf=""><br/></span><span leaf="">vm_exitctl_requested.fields.host_address_space_size = true;                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_vmexit_controls vm_exitctl;                  </span><span leaf=""><br/></span><span leaf="">vm_exitctl.all = vmx_adjust_controlvalue(                  </span><span leaf=""><br/></span><span leaf="">use_true_msrs ? ia32_msr_vmx_true_exit_ctrl : ia32_msr_vmx_exit_ctrl,                  </span><span leaf=""><br/></span><span leaf="">vm_exitctl_requested.all);                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_pinbased_controls vm_pinctl_requested = { 0 };                  </span><span leaf=""><br/></span><span leaf="">// vm_pinctl_requested.fields.nmi_exiting = true;                  </span><span leaf=""><br/></span><span leaf="">// vm_pinctl_requested.fields.virtual_nmis = true;                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_pinbased_controls vm_pinctl = {                  </span><span leaf=""><br/></span><span leaf="">vmx_adjust_controlvalue(use_true_msrs ? ia32_msr_vmx_true_pinbased_ctrl                  </span><span leaf=""><br/></span><span leaf="">: ia32_msr_vmx_pinbased_ctrl,                  </span><span leaf=""><br/></span><span leaf="">vm_pinctl_requested.all) };                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_processorbased_controls vm_procctl_requested = { 0 };                  </span><span leaf=""><br/></span><span leaf="">//vm_procctl_requested.fields.cr3_load_exiting = true;                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.fields.rdtsc_exiting = false;                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.fields.use_tsc_offseting = true;                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.fields.mov_dr_exiting = false;                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.fields.use_io_bitmaps = false;                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.fields.use_msr_bitmaps = false;                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.fields.activate_secondary_control = true;                  </span><span leaf=""><br/></span><span leaf="">// initialize time offset.                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_tscoffset, 0);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_tscoffsethigh, 0);                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_processorbased_controls vmx_procctl;                  </span><span leaf=""><br/></span><span leaf="">vmx_procctl.all =                  </span><span leaf=""><br/></span><span leaf="">vmx_adjust_controlvalue(use_true_msrs ? ia32_msr_vmx_true_priproc_ctrl                  </span><span leaf=""><br/></span><span leaf="">: ia32_msr_vmx_priproc_ctrl,                  </span><span leaf=""><br/></span><span leaf="">vm_procctl_requested.all);                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_secondaryprocessorbased_controls vm_procctls2_requested = { 0 };                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2_requested.fields.enable_rdtscp = true;                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2_requested.fields.enable_invpcid = true;                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2_requested.fields.enable_vpid = true;                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2_requested.fields.enable_xsaves_xstors = true;                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_secondaryprocessorbased_controls vm_procctls2;                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2.all = vmx_adjust_controlvalue(ia32_msr_vmx_2ndproc_ctrl,                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2_requested.all);                  </span><span leaf=""><br/></span><span leaf="">uintptr_t exception_bitmap = 0;                  </span><span leaf=""><br/></span><span leaf="">uintptr_t cr0_mask = 0;                  </span><span leaf=""><br/></span><span leaf="">uintptr_t cr0_shadow = __readcr0();                  </span><span leaf=""><br/></span><span leaf="">uintptr_t cr4_mask = 0;                  </span><span leaf=""><br/></span><span leaf="">uintptr_t cr4_shadow = __readcr4();                  </span><span leaf=""><br/></span><span leaf="">uintptr_t nerror =                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_virtualprocessorid,                  </span><span leaf=""><br/></span><span leaf="">KeGetCurrentProcessorNumberEx(NULL) + 1);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestesselector,                  </span><span leaf=""><br/></span><span leaf="">asm_reades());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readcs());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestssselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readss());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestdsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readds());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestfsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readfs());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestgsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readgs());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestldtrselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readldtr());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guesttrselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readtr());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostesselector,                  </span><span leaf=""><br/></span><span leaf="">asm_reades() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostcsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readcs() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostssselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readss() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostdsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readds() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostfsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readfs() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostgsselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readgs() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hosttrselector,                  </span><span leaf=""><br/></span><span leaf="">asm_readtr() &amp; 0xf8);                  </span><span leaf=""><br/></span><span leaf="">//PHYSICAL_ADDRESS phyAddress = {};                  </span><span leaf=""><br/></span><span leaf="">//nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_msrbitmap,                  </span><span leaf=""><br/></span><span leaf="">//(uintptr_t)MmGetVirtualForPhysical(phyAddress));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_vmcslinkpointer,                  </span><span leaf=""><br/></span><span leaf="">MAXULONG64);                  </span><span leaf=""><br/></span><span leaf="">_ia32_vmx_debugctl_register l_temp_debugReg = { __readmsr(ia32_msr_debug_control) };                  </span><span leaf=""><br/></span><span leaf="">l_temp_debugReg.fields.reserved1 = 0;                  </span><span leaf=""><br/></span><span leaf="">l_temp_debugReg.fields.reserved2 = 0;                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestia32debugctl,                  </span><span leaf=""><br/></span><span leaf="">l_temp_debugReg.all);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite(                  </span><span leaf=""><br/></span><span leaf="">(size_t)_vt_vmcs_field::_vt_vmcs_pinbasedvmexeccontrol, vm_pinctl.all);                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_cpubasedvmexeccontrol,                  </span><span leaf=""><br/></span><span leaf="">vmx_procctl.all);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_exceptionbitmap,                  </span><span leaf=""><br/></span><span leaf="">exception_bitmap);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_vmexitcontrols,                  </span><span leaf=""><br/></span><span leaf="">vm_exitctl.all);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_vmentrycontrols,                  </span><span leaf=""><br/></span><span leaf="">vm_entryctl.all);                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_secondaryvmexeccontrol,                  </span><span leaf=""><br/></span><span leaf="">vm_procctls2.all);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guesteslimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_reades()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestdslimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readds()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcslimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readcs()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestsslimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readss()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestfslimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readfs()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestgslimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readgs()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestldtrlimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readldtr()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guesttrlimit,                  </span><span leaf=""><br/></span><span leaf="">__segmentlimit(asm_readtr()));                  </span><span leaf=""><br/></span><span leaf="">// uintptr_t nerror |= __vmx_vmwrite(_vt_vmcs_field::, function::);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestgdtrlimit,                  </span><span leaf=""><br/></span><span leaf="">gdtr.limit);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestidtrlimit,                  </span><span leaf=""><br/></span><span leaf="">idtr.limit);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestesarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_reades()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcsarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readcs()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestssarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readss()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestdsarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readds()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestfsarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readfs()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestgsarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readgs()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestldtrarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readldtr()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guesttrarbytes,                  </span><span leaf=""><br/></span><span leaf="">vmx_getsegment_accessright(asm_readtr()));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestsysentercs,                  </span><span leaf=""><br/></span><span leaf="">__readmsr(                  </span><span leaf=""><br/></span><span leaf="">(unsigned long)_vt_msr_value::_vt_msr_sysentercs));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostia32sysentercs,                  </span><span leaf=""><br/></span><span leaf="">__readmsr(                  </span><span leaf=""><br/></span><span leaf="">(unsigned long)_vt_msr_value::_vt_msr_sysentercs));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_cr0guesthostmask,                  </span><span leaf=""><br/></span><span leaf="">cr0_mask);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_cr4guesthostmask,                  </span><span leaf=""><br/></span><span leaf="">cr4_mask);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_cr0readshadow,                  </span><span leaf=""><br/></span><span leaf="">cr0_shadow);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_cr4readshadow,                  </span><span leaf=""><br/></span><span leaf="">cr4_shadow);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcr0,                  </span><span leaf=""><br/></span><span leaf="">__readcr0());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcr3,                  </span><span leaf=""><br/></span><span leaf="">__readcr3());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcr4,                  </span><span leaf=""><br/></span><span leaf="">__readcr4());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestesbase, 0);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestcsbase, 0);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestssbase, 0);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestdsbase, 0);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite(                  </span><span leaf=""><br/></span><span leaf="">(size_t)_vt_vmcs_field::_vt_vmcs_guestfsbase,                  </span><span leaf=""><br/></span><span leaf="">__readmsr((unsigned long)_vt_msr_value::_vt_msr_fsbase));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite(                  </span><span leaf=""><br/></span><span leaf="">(size_t)_vt_vmcs_field::_vt_vmcs_guestgsbase,                  </span><span leaf=""><br/></span><span leaf="">__readmsr((unsigned long)_vt_msr_value::_vt_msr_gsbase));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestldtrbase,                  </span><span leaf=""><br/></span><span leaf="">vmx_get_segmentbase(gdtr.base_address, asm_readldtr()));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guesttrbase,                  </span><span leaf=""><br/></span><span leaf="">vmx_get_segmentbase(gdtr.base_address, asm_readtr()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestgdtrbase,                  </span><span leaf=""><br/></span><span leaf="">gdtr.base_address);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestidtrbase,                  </span><span leaf=""><br/></span><span leaf="">idtr.base_address);                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestdr7, __readdr(7));                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR rflags = __readeflags();                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestrflags,                  </span><span leaf=""><br/></span><span leaf="">rflags);                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestsysenteresp,                  </span><span leaf=""><br/></span><span leaf="">__readmsr(                  </span><span leaf=""><br/></span><span leaf="">(unsigned long)_vt_msr_value::_vt_msr_sysenteresp));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestsysentereip,                  </span><span leaf=""><br/></span><span leaf="">__readmsr(                  </span><span leaf=""><br/></span><span leaf="">(unsigned long)_vt_msr_value::_vt_msr_sysentereip));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostcr0,                  </span><span leaf=""><br/></span><span leaf="">__readcr0());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostcr3,                  </span><span leaf=""><br/></span><span leaf="">__readcr3());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostcr4,                  </span><span leaf=""><br/></span><span leaf="">__readcr4());                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite(                  </span><span leaf=""><br/></span><span leaf="">(size_t)_vt_vmcs_field::_vt_vmcs_hostfsbase,                  </span><span leaf=""><br/></span><span leaf="">__readmsr((unsigned long)_vt_msr_value::_vt_msr_fsbase));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite(                  </span><span leaf=""><br/></span><span leaf="">(size_t)_vt_vmcs_field::_vt_vmcs_hostgsbase,                  </span><span leaf=""><br/></span><span leaf="">__readmsr((unsigned long)_vt_msr_value::_vt_msr_gsbase));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hosttrbase,                  </span><span leaf=""><br/></span><span leaf="">vmx_get_segmentbase(gdtr.base_address, asm_readtr()));                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostgdtrbase,                  </span><span leaf=""><br/></span><span leaf="">gdtr.base_address);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostidtrbase,                  </span><span leaf=""><br/></span><span leaf="">idtr.base_address);                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostia32sysenteresp,                  </span><span leaf=""><br/></span><span leaf="">__readmsr(                  </span><span leaf=""><br/></span><span leaf="">(unsigned long)_vt_msr_value::_vt_msr_sysenteresp));                  </span><span leaf=""><br/></span><span leaf="">nerror |=                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostia32sysentereip,                  </span><span leaf=""><br/></span><span leaf="">__readmsr(                  </span><span leaf=""><br/></span><span leaf="">(unsigned long)_vt_msr_value::_vt_msr_sysentereip));                  </span><span leaf=""><br/></span><span leaf="">uintptr_t vmm_stack_region_base = (uintptr_t)(vcpu-&gt;stack) + kernel_stack_szie;                  </span><span leaf=""><br/></span><span leaf="">uintptr_t vmm_stack_data = (uintptr_t)(vmm_stack_region_base)-sizeof(void*);                  </span><span leaf=""><br/></span><span leaf="">*(_vt_vcpu_context**)vmm_stack_data = vcpu;                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR vmm_stack_base = vmm_stack_region_base - sizeof(_vt_vcpu_context*) - sizeof(_result_registers);                  </span><span leaf=""><br/></span><span leaf="">//nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_eptpointer, 0);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostrsp, vmm_stack_base);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_hostrip, (size_t)asm_vmmentrypoint);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestrsp, guest_stack_pointer);                  </span><span leaf=""><br/></span><span leaf="">nerror |= __vmx_vmwrite((size_t)_vt_vmcs_field::_vt_vmcs_guestrip, guest_instruction_pointer);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmlaunch();                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这里，我们只简单讲解最后几行的代码，其他的设置可以参考上面的文章引用，有更详细的解释，我们设置了hostrsp、hostrip、guestrsp、guestrip，并执行vmlaunch，当代码正常运行时，我们的cpu会自动进入guest模式，再guestrip处开始执行，如果cpu触发了某些vt的事件导致退出，那么会导致cpu进入host模式，并执行hostrip处的代码</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_7;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VT Host的handler处理：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">为了压缩篇幅，我们将尽可能的减少功能的实现，除非一些&#34;必不可少的功能&#34;，例如，我们需要实现cpuid、msr、nmi、vmx指令的处理，其余的暂时不涉及</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_8;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">1. </span></span></span><span style="mso-bookmark:heading_8;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">NMI</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">针对NMI，我们选择直接注入到guest的方式进行，但需要注意的是，不需要挪动guest环境中的RIP</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void vt_vmm_handleexception(_vt_vmhandle_guestcontext* guest_context) {                  </span><span leaf=""><br/></span><span leaf="">size_t exit_exception_value = 0;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((size_t)_vt_vmcs_field::_vt_vmcs_vmexitintrinfo, &amp;exit_exception_value);                  </span><span leaf=""><br/></span><span leaf="">const _vt_vmexit_interruptioninformationfield exception = { exit_exception_value };                  </span><span leaf=""><br/></span><span leaf="">const _vt_interruption_type interruption_type = (_vt_interruption_type)(exception.fields.interruption_type);                  </span><span leaf=""><br/></span><span leaf="">const _vt_interruption_vector vector = (_vt_interruption_vector)(exception.fields.vector);                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR guest_inst_length;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((ULONG_PTR)_vt_vmcs_field::_vt_vmcs_vmexitinstructionlen, &amp;guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">ULONG_PTR error_code = 0;                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((ULONG32)_vt_vmcs_field::_vt_vmcs_vmexitintrerrorcode, &amp;error_code);                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(interruption_type, vector, exception.fields.error_code_valid, error_code);                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)_vt_vmcs_field::_vt_vmcs_vmentryinstructionlen, guest_inst_length);                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_9;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">2. </span></span></span><span style="mso-bookmark:heading_9;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Cpuid</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">针对CPUID，我们直接通过调用CPUID，将返回值直接进行写入的方式进行处理，尽管这种处理是存在漏洞的，但本次的完成目标不涉及这块</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void vt_vmm_handlecpuid(_vt_vmhandle_guestcontext* guest_context) {                  </span><span leaf=""><br/></span><span leaf="">int buf[4];                  </span><span leaf=""><br/></span><span leaf="">__cpuidex(buf, guest_context-&gt;stack-&gt;gp_regs.Rax, guest_context-&gt;stack-&gt;gp_regs.Rcx);                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rax = buf[0];                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rbx = buf[1];                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rcx = buf[2];                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rdx = buf[3];                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;vm_movinstruction = true;                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_10;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">3. </span></span></span><span style="mso-bookmark:heading_10;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Msr</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">针对msr的读取和写入，我们也是采取相同的方式进行，但是得套一层异常处理，因为在读写时，可能会导致CPU抛出来异常。在针对一些特殊的msr寄存器时，我们需要用特殊的vmcs段进行代替</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">bool vt_vmm_handlemsraccess(                  </span><span leaf=""><br/></span><span leaf="">_vt_vmhandle_guestcontext* guest_context, bool read_access) {                  </span><span leaf=""><br/></span><span leaf="">const auto msr = (_vt_msr_value)(guest_context-&gt;stack-&gt;gp_regs.Rcx);                  </span><span leaf=""><br/></span><span leaf="">bool transfer_to_vmcs = false;                  </span><span leaf=""><br/></span><span leaf="">_vt_vmcs_field vmcs_field = {};                  </span><span leaf=""><br/></span><span leaf="">switch (msr) {                  </span><span leaf=""><br/></span><span leaf="">case _vt_msr_value::_vt_msr_sysentercs:                  </span><span leaf=""><br/></span><span leaf="">vmcs_field = _vt_vmcs_field::_vt_vmcs_guestsysentercs;                  </span><span leaf=""><br/></span><span leaf="">transfer_to_vmcs = true;                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">case _vt_msr_value::_vt_msr_sysenteresp:                  </span><span leaf=""><br/></span><span leaf="">vmcs_field = _vt_vmcs_field::_vt_vmcs_guestsysenteresp;                  </span><span leaf=""><br/></span><span leaf="">transfer_to_vmcs = true;                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">case _vt_msr_value::_vt_msr_sysentereip:                  </span><span leaf=""><br/></span><span leaf="">vmcs_field = _vt_vmcs_field::_vt_vmcs_guestsysentereip;                  </span><span leaf=""><br/></span><span leaf="">transfer_to_vmcs = true;                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">case _vt_msr_value::_vt_msr_debugctl:                  </span><span leaf=""><br/></span><span leaf="">vmcs_field = _vt_vmcs_field::_vt_vmcs_guestia32debugctl;                  </span><span leaf=""><br/></span><span leaf="">transfer_to_vmcs = true;                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">case _vt_msr_value::_vt_msr_gsbase:                  </span><span leaf=""><br/></span><span leaf="">vmcs_field = _vt_vmcs_field::_vt_vmcs_guestgsbase;                  </span><span leaf=""><br/></span><span leaf="">transfer_to_vmcs = true;                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">case _vt_msr_value::_vt_msr_fsbase:                  </span><span leaf=""><br/></span><span leaf="">vmcs_field = _vt_vmcs_field::_vt_vmcs_guestfsbase;                  </span><span leaf=""><br/></span><span leaf="">transfer_to_vmcs = true;                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">default:                  </span><span leaf=""><br/></span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">const auto is_64bit_vmcs = (vmcs_field &gt;= _vt_vmcs_field::_vt_vmcs_iobitmapa) &amp;&amp; (vmcs_field &lt;= _vt_vmcs_field::_vt_vmcs_hostia32perfglobalctrlhigh);                  </span><span leaf=""><br/></span><span leaf="">LARGE_INTEGER msr_value = {};                  </span><span leaf=""><br/></span><span leaf="">if (read_access) {                  </span><span leaf=""><br/></span><span leaf="">if (transfer_to_vmcs) {                  </span><span leaf=""><br/></span><span leaf="">if (is_64bit_vmcs) {                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((ULONG32)vmcs_field, (size_t*)&amp;msr_value.QuadPart);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">__vmx_vmread((ULONG32)vmcs_field, (size_t*)&amp;msr_value.QuadPart);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">msr_value.QuadPart = __readmsr((ULONG32)msr);                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rax = msr_value.LowPart;                  </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;stack-&gt;gp_regs.Rdx = msr_value.HighPart;                  </span><span leaf=""><br/></span><span leaf="">}                  </span><span leaf=""><br/></span><span leaf="">else {                  </span><span leaf=""><br/></span><span leaf="">msr_value.LowPart = static_cast</span><ulong><span leaf="">(guest_context-&gt;stack-&gt;gp_regs.Rax);          </span><span leaf=""><br/></span><span leaf="">msr_value.HighPart = static_cast</span><ulong><span leaf="">(guest_context-&gt;stack-&gt;gp_regs.Rdx);           </span><span leaf=""><br/></span><span leaf="">if (transfer_to_vmcs) {           </span><span leaf=""><br/></span><span leaf="">if (is_64bit_vmcs) {           </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)vmcs_field, (size_t)msr_value.QuadPart);           </span><span leaf=""><br/></span><span leaf="">}           </span><span leaf=""><br/></span><span leaf="">else {           </span><span leaf=""><br/></span><span leaf="">__vmx_vmwrite((ULONG32)vmcs_field, (size_t)msr_value.QuadPart);           </span><span leaf=""><br/></span><span leaf="">}           </span><span leaf=""><br/></span><span leaf="">}           </span><span leaf=""><br/></span><span leaf="">else {           </span><span leaf=""><br/></span><span leaf="">__writemsr((ULONG32)msr, (size_t)msr_value.QuadPart);           </span><span leaf=""><br/></span><span leaf="">}           </span><span leaf=""><br/></span><span leaf="">}           </span><span leaf=""><br/></span><span leaf="">guest_context-&gt;vm_movinstruction = true;           </span><span leaf=""><br/></span><span leaf="">return true;           </span><span leaf=""><br/></span><span leaf="">}</span></ulong></ulong></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_11;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">4. </span></span></span><span style="mso-bookmark:heading_11;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">vmx指令</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">由于本期不涉及嵌套，所以相关指令，我们直接注入一个事件即可</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void vt_vmm_handle_vmx(_vt_vmhandle_guestcontext* guest_context) {                  </span><span leaf=""><br/></span><span leaf="">vt_vmm_injectinterruption(_vt_interruption_type::_vt_interruption_hardwareexception,                  </span><span leaf=""><br/></span><span leaf="">_vt_interruption_vector::_vt_intteruptionvec_invalidopcodeexception, false,                  </span><span leaf=""><br/></span><span leaf="">0);                  </span><span leaf=""><br/></span><span leaf="">return;                  </span><span leaf=""><br/></span><span leaf="">}</span></span></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_12;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">结尾：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">至此，我们的代码已经可以在虚拟机中跑起来了，尽管本工程比较简陋，但对于目前接下来要做的功能，已经绰绰有余了</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a4478716&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485989%26idx%3D1%26sn%3D244f30b755ffa00e6cfcd7898c9a81d9">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 28 Mar 2026 10:01:00 +0800</pubDate>
    </item>
    <item>
      <title>从0训练自己的AI大模型(上)</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485967&amp;idx=1&amp;sn=75ccdade1b71b91fdbca718b77005975</link>
      <description>前言2026年了，随着openclaw，ai agent的爆火，越来越多的人开始研究LLM的应用领域，不过我本</description>
      <content:encoded><![CDATA[<p>原创 <span>为了安全鸭</span> <span>2026-03-27 10:01</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a73f2750&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVNDsPaU3Pljqw8WDPEGyibHquRqJFepvIbRYbbTTXg4TNuQT3WxdnvoI84rgnGmcRuZ8z53YbnqUP30Gx3xPibmIwkuV0q7Kf5zg%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2026年了，随着openclaw，ai agent的爆火，越来越多的人开始研究LLM的应用领域，不过我本人对它不咋感冒，一个是我无论是工作上还是生活中agent写得用的够多了</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">《[2025]中外AI大战!让AI们通过MCP玩帝国时代2》</span><span leaf=""><br/></span><span leaf=""><a href="https://key08.com/index.php/2025/10/04/2816.html" target="_blank">https://key08.com/index.php/2025/10/04/2816.html</a></span><span leaf=""><br/></span><span leaf="">另外一个是，我觉得agent这些应用层的东西不够底层，没有什么价值。所以快过新年的时候，就打算年后学习咋做LLM，自己搞个AI大模型出来。不过年后公司业务真的忙，一直没空，到3月份也很忙。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ps:现在AI写代码了，理论上更轻松了，但是现实中怎么更忙了。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">但是没办法了，我觉得自己不能被垃圾业务代码淹没，所以再怎么忙也抽时间开始这个项目了。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">首先声明，虽然我之前懂机器学习/深度学习/强化学习，不过这些都只会一点点，我不是LLM领域专家，要是写的不好或者有问题请评论区请指出我的错误。</span></strong></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">前期准备</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">明确自己要干什么</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在训练的第一步，我们确定自己要搞什么，我确定我是搞网络安全的，我要最低代价训练一个看起来不错的小模型就行，其他的能力拉了就拉了，专项训练不是那么容易的。</span><span leaf=""><br/></span><span leaf="">因此我们确定：</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">我们是小模型，不用太多资源</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">搞着玩的，自己学习大模型训练，他基本只是个DEMO，不要做太好，不要花太多钱。</span></p></li></ol><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">服务器配置</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">基本上，我们前期要准备一个AI训练服务器，我准备训练的模型大小是0.6b，所以两张A100就行了，太多了资源溢出了。但是硬盘和带宽要稍微大一点，特别是带宽，走梯子拉hf的内容，带宽32M绝对不够用。</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002252" data-ratio="1.300556586270872" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="539" src="https://wechat2rss.xlab.app/img-proxy/?k=fc880183&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPYMiawnwd0mbrK4zZFoXRVe342yr3eW5070pAGZ0bIQL5u8mFqPUH4D5MRdrvqd1D0yTJOocN8xlg6via5bWRRrGx6AjP6gM8v0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">准备</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">预训练数据集</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这有两个推荐的</span><span leaf=""><br/></span><span leaf="">commoncrawl -数百 TB 级别的数据，数十亿网页中提取的 TB 级原始网络数据，每月都会爬取新的数据，但我没用，因为光下完我估计我就没了几万块了。</span><span leaf=""><br/></span><span leaf=""><a href="https://commoncrawl.org/get-started" target="_blank">https://commoncrawl.org/get-started</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">RefinedWeb</span><span leaf=""><br/></span><span leaf="">1TB 左右，9.68亿条数据</span><span leaf=""><br/></span><span leaf="">Common Crawl 数据集的大量经过重复数据删除和过滤的标记语料库，它是为较小规模但高质量的数据集训练 Falcon-40B 模型而开发的</span><span leaf=""><br/></span><span leaf=""><a href="https://huggingface.co/datasets/tiiuae/falcon-refinedweb" target="_blank">https://huggingface.co/datasets/tiiuae/falcon-refinedweb</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">网络安全社区的爬虫数据/CEV/POC/exploit-db/github安全相关的东西混在一起</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">由于RefinedWeb是纯英文的，所以我又找了几个hugging face上不知名的中文数据集，中文数据集是真的难找，随便找了几个。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">模型架构</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这里我就一个经验，永远不要自己创造乱七八糟的架构(其实架构不咋重要，重要的是数据)，所以我选了llama的，由于分词表llama对中文不太好，用qwen的分词表。此外快速注意力，rope这些都上了。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">开始训练</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以，现在训练一个模型成本极其的低廉了，我只需要搞个服务器，然后装一个opencode，我给他数据，让他搅拌在一起，就能开始预训练了。你不用关心操作，只需要关心细节就行。</span><span leaf=""><br/></span><span leaf="">模型loss降低的很快，一晚上就从9到3，似乎一切都朝着好的方向发展，我们很快就能训练一个好的模型了</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002253" data-ratio="0.559040590405904" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1084" src="https://wechat2rss.xlab.app/img-proxy/?k=c4bb1e96&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOXMoh9FVvxvgORlzPkTicyhQYsyeTyxgsnOlHava1Llv0kNwE7oJcVCia3EhNm6ib8iaSU9DgddWRs5Dq4RugeUqiblJsljACcJE5M%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">LOSS居然不降低了</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">过了大概3天后，我观察到一个问题，loss居然不继续降低了，还是在3-2左右</span><span leaf=""><br/></span><span leaf="">看了看checkpoints，成这样了</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002257" data-ratio="0.3688172043010753" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="930" src="https://wechat2rss.xlab.app/img-proxy/?k=34ef35ba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMuJthx0sKb2tdQ4lGdoib0BEQFc1icOpnkdgwRC1DJNTGjZT4SBDEYTiaKibFpauXvsr1S1MBlRm8rF63v8c0N51uUf5HKTreRwPw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002255" data-ratio="0.4206798866855524" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="706" src="https://wechat2rss.xlab.app/img-proxy/?k=b6d80f78&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOy0M6TxpuzFfqfJeibnPOiaLNOPyAicgqmYta3jsQRy2QVOiaheJPm9YymyoREbzx0h5lDJXmNssKTB4OOf6TJVfbIMCjb3q8URgc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002256" data-ratio="0.32413793103448274" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="580" src="https://wechat2rss.xlab.app/img-proxy/?k=879a5ec7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNUpY1QNgNy9LxqvLOpHalC0QBThNL1Bjra3CZbV0jSibHSst28rSR3maHwDeUXfUG84SrYiaMy7HBhdXiabghwia0YCrXtP6P9Pb0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">为什么会这样，这个问题别让ai回答，因为我被AI坑了，AI说是训练时间不够久，然后就训练到了60000步，等回过头的时候，已经被坑惨了</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002258" data-ratio="0.7910447761194029" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1005" src="https://wechat2rss.xlab.app/img-proxy/?k=9db34f50&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVP3TXMu9lZe95STEFuNyqB2jzPN6hEWWzjJptpUVTWFA8hBduQZWZ3BllbDYuAHbFVMQGIVzy0Uf1ATTf4aIg7ARKCY7AmTrqs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">让我们仔细回顾一下数据集，RefinedWeb我用了，这个应该是洗好的，网络安全社区的爬虫数据.这个是问题，它包含了大量的无用的标签，时间戳，这些标签因为我们训练的是0.6b的模型，他会让模型困惑，毫无逻辑。可能在更大的模型上他会学到这个是网页，但是对于一个0.6b的模型来说太勉强了。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">因此，我们只能清洗一下数据，所谓清洗，我们直接点，国内论坛强行只保留中文，删除非中文或者非代码的内容。删掉无意义的CVE的编号，等。然后我们由于一开始就训练坏了，只能重新训练了，这次看表现还不错，几千次就这样了</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002276" data-ratio="0.585016835016835" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1188" src="https://wechat2rss.xlab.app/img-proxy/?k=b9776751&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNOW0S5a2qAxIDVoUtKIPCruGE57HibOjm0c3EUNqDkj9ez57ibzKnWaChcXbZSe90r2ic7sXJiaYLqS3vlicEwVTgZXugGR0F9Fd4A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">然后等吧，由于是重新再来，相当于浪费了1000多，挂了两天，看看效果：</span><span leaf=""><br/></span><span leaf="">肉眼可见loss低了：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002278" data-ratio="0.6039689387402933" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1159" src="https://wechat2rss.xlab.app/img-proxy/?k=92ec342c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMrmSiaTSFnBGmHcd3ichCCV8w6cAHV13yYRHF3ILibCibFECaiamSuzxnuTdWnysRHCyfZ4VoFAftX7ETVcQhOpkzjmxoNKfnPrXzc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">续写也很正常一点了</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002277" data-ratio="0.11403980634749865" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1859" src="https://wechat2rss.xlab.app/img-proxy/?k=1251d14b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVM2psicKyr4BWXTFIcNOIyVPoNK0ey2W5H5wibfrcgKjS8R3UIFqHxSuAPJHcQticPJOm1hqPL3p3cnakZpvUgxgDxqko00qAMjp8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">但是我发现，这玩意大而空：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002274" data-ratio="0.3300124533001245" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="803" src="https://wechat2rss.xlab.app/img-proxy/?k=60f617d6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMnLufwnwNiaENpyntMv01PR0NH9IpGM5q14h69rZYxR9LBH9cTWp3d2TvZUhXgYOz1icyNeMuXwlV1bmhwpTGcmvGa9q5YaLKf0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">我认为是数据不够的结果，所以不管他继续训练了。</span><span leaf=""><br/></span><span leaf="">又过了一天</span><span leaf=""><br/></span><span leaf="">我发现最新的checkpoints出现损坏的情况：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002275" data-ratio="0.6937984496124031" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1032" src="https://wechat2rss.xlab.app/img-proxy/?k=3150bbbb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPibpThTAGkEbBKLJEuFsuWiaGkPpa2ArTLicp8e0qXDxzL0vtgwYSXsIqxrgc5NKECnAvbvmuqKF8MibXibteBK8LpKSUKEZibuEyyA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">所以先回退到老版本，做一下SFT</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SFT</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">有了一个续写模型后，我们可以下一步，开始进行SFT微调了, 这样才有对话能力，自我认知能力。</span><span leaf=""><br/></span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">这真的是一个大坑</span></strong><span leaf=""><br/></span><span leaf="">pre train还算中规中矩。post train就麻烦了，一开始我从网上随便找了数据集进行训练，发现会让模型直接损坏！</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002280" data-ratio="0.3928748144482929" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="2021" src="https://wechat2rss.xlab.app/img-proxy/?k=2f1ddd51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVN2XT41EmAmcKTFnbqEtjhpgndJjliaeicEeoc7wMtswmicMSlcePHtyr7prOApfjfMLSlE3ML6RJ7ZSAiaZzoN80NARicwLj0bFKFk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002282" data-ratio="0.3029835390946502" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1944" src="https://wechat2rss.xlab.app/img-proxy/?k=933dbc62&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNnD7q8o0aVibqWWqHTxqHObxb3GZbDPfe4rSDoickiaibibY9LmrZaX7oEc4L6LIKwcqNfnzPnvDLGRyQTnjnk2l4VTcKoW2wrFlCs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">还有更离谱的,老外的训练集也带黄色废料,导致模型学了不该学的:</span><span leaf=""><br/></span><span leaf="">(当我说’你好’的时候)</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002279" data-ratio="0.12051282051282051" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1950" src="https://wechat2rss.xlab.app/img-proxy/?k=4a534a72&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVMgb1SmLVlpqlI7QByL0qovSKqFZ61VvEjticjVHCpYqcQqc6RDNOWJq6mkB7W5zuVIG8sUy7riblrtmVdnaZNT4VZIS8tws4pcQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这tm是一个黄色废料….</span><span leaf=""><br/></span><span leaf="">实在不行了！业务上又有一堆事…于是乎我找了一个hf上很火的deepseek蒸馏的数据集，不带think的那个，又过了一天…</span><span leaf=""><br/></span><span leaf="">结果第二天看的时候 我特么发现不对劲..</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002283" data-ratio="0.4649629018961253" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1213" src="https://wechat2rss.xlab.app/img-proxy/?k=b1af39d3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOicaROibriazc79y0OQYlpo0W182ZIRClosia6ia1878SONC9mzTP3Ku4tzY8L939eRmhTXmLS4m1JcaNOU3w5LI9RCf6It34rk3CM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">怎么回事，这么那么多”美人”啊</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002281" data-ratio="0.34668892598775736" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="jpeg" data-w="1797" src="https://wechat2rss.xlab.app/img-proxy/?k=5c290cb0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVN5UQzL5pI5cdoUpEqU3xgO9A523MJoich1ND78nwslh6GD5e7R7MiaRTPKUkh15pjsFZYMia1IeXiadUOdjd0iaYqwkenEnuWT6AQY%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">检查checkpoints，发现从很早开始，模型就学会美人了，而且他最早的时候居然在写小黄文….</span><span leaf=""><br/></span><span leaf="">倒查训练集，我发现一个绝望的事情，我的训练集里面充满了小黄文，其中美人来自这里</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002288" data-ratio="0.09662921348314607" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="jpeg" data-w="2670" src="https://wechat2rss.xlab.app/img-proxy/?k=2fcc3feb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F1woCcbOsjVMpQc90G83Bicb1lYqbtnmthibA2Bs7M5ricIcXpqW69nX6DHzUK8wfzkSTg1g28Z60q0IhQ1ZqQbSsSjbaMibsv5tWG6LnKFg5zzY%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">完了，又白训练了.</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">捣鼓半天，试了N个数据集，效果还是不明显。其实后来写文章的时候看，这就触发了我前面说的两个大坑</span><span leaf=""><br/></span><span leaf="">我们用了RefinedWeb，并且用了一些受污染的/完全不知名的中文训练集来做预训练，这导致，模型的底座中文能力其实是偏差的，即便是有合成数据在，一开始的混入的中文低质量语料去不掉了，除非</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">重新训练</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二个问题，我们的模型比较小，只有0.6b，他受到post train的影响非常大，他并不是一个通用模型，如果我们再拿网上的一些数据去给他做SFT，他只会学到乱七八糟的 杂七杂八的内容，除非我们预训练做的非常充分。</span><span leaf=""><br/></span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">而看起来，我们的预训练也不充分，数据集不够多，次数也不够多，数据配比也有问题。一系列问题导致我们到了如今的情况。</span></strong></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">make duckgpt greate again</span></h2><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">其实前面写了一大堆废话的原因是因为，很明显，我前面的各种操作导致模型训练失败了。这种感觉就像是，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">你想去送外卖但是没有电动车，冰箱里面有泡面但是没有卤蛋，塞满了资料的硬盘说挂，很好的朋友突然翻脸，认真做的东西没人喜欢,你又会发现龟苓膏里面没有龟，老婆饼里面没有老婆，你以为的通常都不是通常，生气没用，愤怒徒劳，不行就是不行</span></strong><span leaf="">，但是失败并不丢人，只要总结原因，我们一定能解决各种未知的困难，毕竟这不是物理学。而经过冷静思考，我发现我前几天失败的原因是，在没有科学的进行学习的情况下干某件事，就跟《勇哥说餐饮》里面的蜘蛛侠一样失败。</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">于是乎为了解决问题，我重新进行了大量的资料学习，并且我仔细思考了一下目前的困境:</span><span leaf=""><br/></span><span leaf="">英文的效果都是好的，英文看起来至少都正常，比如这个，但是模型完全不会中文</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002297" data-ratio="0.062377402903099254" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="2549" src="https://wechat2rss.xlab.app/img-proxy/?k=08410af9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOibDroN0LgSRuxZ0QgPlY7Ropiah1quibRfkGN91p2uamoCawqmvue3jCd0oLJuePKLGtcErRMO7OCwhrNy53OPVUu3OwmRJ4J7s%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">因此本质上，需要的是pre train足够扎实，但是我们的pre train并不扎实</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">经过一段时间的学习和资料查找和别人的大模型POC学习（minimind），我发现，我们的重大失误:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">首先，我们需要我们正确配比数据，正确的做法是，模型大小 x 20，比如我是0.6b的模型，则需要12b的数据。此外这之，我也不打算先训练网络安全的数据了，用完90%是通用数据，10%是合成的网络安全数据</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">此外，我们不能用野鸡的数据集，HF上很多数据集并没有进行很好的清理，一味的追求数据大规模，只会导致模型啥也学不到，除非模型参数是真的大，大到无视这种杂七杂八的数据，但是那种几百B的我们个人是搞不定的。</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><em style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><span leaf="">小模型对输入的数据很敏感</span></em></strong><span leaf="">。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后，我的SFT数据集也有问题，我们太相信网上的数据了，但是网上数据他并不是正常分布的，他充斥着很多人对AI的想法，比如有人拿AI做数学题，有人让AI写小黄文，有人让AI解决数学作业。这些如果是大模型搞通用大模型是可以的，但是这些数据对于我们来说，有毒。会拉低整体模型水平，正规做法是base+通用任务SFT+领域任务SFT，而不是一股脑全塞进去会导致出问题。</span><span leaf=""><br/></span><span leaf="">因此SFT数据配比我90%都是大模型合成，10%是网上通用数据。并且SFT训练率通常要是pre train的0.1左右，大了可能不收敛。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后的最后，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">我发现的模型架构也有问题</span><span leaf=""><br/></span><span leaf="">我们用了Qwen的分词器，Qwen的分词器占用大概151k 加上并没有用tie，导致实际上attention就会很小很小</span></strong><span leaf="">，解决方案是换一个词表+用TIE</span><span leaf=""><br/></span><span leaf="">(实际上，在QWEN3里面的说法中，4B以下的模型都用tie)</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002299" data-ratio="0.9177215189873418" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="790" src="https://wechat2rss.xlab.app/img-proxy/?k=a74e7421&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVOHFuPcZHM3m70X8H9Qk4bQQ3J5XnFCIvG40Bic0lrOLs6G2gKS8MYsSHia05MWQDaj9ct8LHibpVuTSg72IicC3khggibPQa77Y8L0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">合成数据</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">现在大模型厂商训练开始用合成数据来进行训练，即用一个更大的模型合成数据给小模型出来用，自然语言数据已经快到头了对于很多大模型来说（当然对于我来说不是）。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我们可以从中获得的启发是，大模型合成的数据，相比从网上爬来的野鸡数据，至少清洗过，可靠。另外对于raw data，做数据清洗是一个体力活，我一个人时间有限，而且这个吞金兽还开着，时间很珍贵。所以我立刻开始了下一步，用本地模型进行合成数据的操作</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我准备用两种模型来合成数据，一个是本地的qewn3.5,他们做的非常不错，本地成本低，另外一个是云端的大模型，为了实现合成数据，我让AI写了一个发散脚本，即自己思考自己下一步要生成什么，因为我们是做pre train，所以做的是续写而不是对话。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我的配置是云端大模型占了30%，本地小模型占了70%</span><span leaf=""><br/></span><span leaf="">为什么用本地模型，因为在线大模型耗钱啊！</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002298" data-ratio="0.15376984126984128" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1008" src="https://wechat2rss.xlab.app/img-proxy/?k=618ac2ec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVOoHNFNicZFRg3ENEN76FYgZazyNRWwIKf9VL7ukoIiccLMCdxGwZziaDQiaml2jKHE1ZaEJffIbUt4aqK1MunTETmEPYWI2ibamia8o%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">先让大模型无限自动生成种子数据：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002295" data-ratio="0.6357947434292867" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="799" src="https://wechat2rss.xlab.app/img-proxy/?k=d0403dab&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMN2TIa9YictNjicyCyHNG3Uoa9uG767lowVPvbicXIfyT0yfnU2v11cicXBjQB2dSENUCrDyxkt78eadyJjnOFFxRWPpK6Sye4soY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">然后拿这些东西去让大模型续写：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002296" data-ratio="0.3489749430523918" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="2195" src="https://wechat2rss.xlab.app/img-proxy/?k=fff38c4b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVORP82jBAXvKOiaQpBh7ms4e6VjrvfbTzvqKvTVQGKoxl619ZZZO9no5ecfuE8RI5icP2SCGzyNd1kSZTYtNnybrnxm0AD11qaY4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这样就得到了一批高质量的数据，虽然还是有问题，比如大模型的幻觉会会影响数据质量，而且我也没清洗过，但是至少靠谱一点了.</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结果，又过了两天（-400rmb）</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">重新预训练</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以，我重新进行了预训练，搞了几个高质量的通用任务数据集:</span><span leaf=""><br/></span><span leaf=""><a href="https://huggingface.co/datasets/Goose-World/RWKV-World-v3" target="_blank">https://huggingface.co/datasets/Goose-World/RWKV-World-v3</a></span><span leaf=""><br/></span><span leaf=""><a href="https://huggingface.co/datasets/opencsg/Fineweb-Edu-Chinese-V2.2" target="_blank">https://huggingface.co/datasets/opencsg/Fineweb-Edu-Chinese-V2.2</a></span><span leaf=""><br/></span><span leaf=""><a href="https://huggingface.co/datasets/shareAI/ShareGPT-Chinese-English-90k" target="_blank">https://huggingface.co/datasets/shareAI/ShareGPT-Chinese-English-90k</a></span><span leaf=""><br/></span><span leaf="">等等..</span><span leaf=""><br/></span><span leaf="">然后继续合成数据:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002303" data-ratio="0.4432348367029549" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1929" src="https://wechat2rss.xlab.app/img-proxy/?k=e4cf8278&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVPjkZQP8kqdb8auGhYfZ4vFX7oyQIsguUiboSvecSxb18IVzLFiaGObsrLmqJC1TBib8fxcUnIoG5AqUw9wQZhobFBNcGk0CBJpKw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">数据大小限制在12b左右，不扩大。</span><span leaf=""><br/></span><span leaf="">终于，在睡了一觉后，loss终于稳定在2.5-3左右了：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002302" data-ratio="0.2939890710382514" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="915" src="https://wechat2rss.xlab.app/img-proxy/?k=e908f45a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPSIl0L2Ps0aXpnXoKcqO73YEwXnHmibbE2cZE5PPs0YJZcJK5ma3JNS8xGqQzFtaK2icwSoOoAjk5uCYlStfbHueNaiakTgurxvY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002304" data-ratio="1.0545790934320074" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1081" src="https://wechat2rss.xlab.app/img-proxy/?k=8fa64d58&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVONKMLBkXOtyjSEWib6To9uChrowcmIEM3pvOmibqOiaJms5kku7F1PnJWaycDEGJfzvUR54LCbUibSbnBIoxbNn0aBRqIdj84Tmms%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">看起来靠谱一点了，没之前那么离谱</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002301" data-ratio="0.4440357330530741" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1903" src="https://wechat2rss.xlab.app/img-proxy/?k=0e352f80&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNOBzzkxHhdMnmUGDfg6I80mPMzoCx64UrDYnOuTuQJVqED5LINR3ZjYdhCq4xsUNIXj8iarIPmvlG0AgjYLq1ZulgSTavFnWDY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">于是我们得到了一个pre train训练好的模型。虽然这个模型很垃圾，其他领域续写一窍不通，因为我们没有给他投喂太多的语料。但是对于安全领域，属于是能跑吧</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">现在再对其做SFT。用了合成数据，其他没什么特别的</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">做完后效果如下:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002300" data-ratio="0.23833333333333334" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1200" src="https://wechat2rss.xlab.app/img-proxy/?k=0052fae8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVN6BgR4g4N5ffaZvpgiaqicsoWnPRnYZI0ucibS2U34TzKPTEtWBPia6befP1Pm7HfKw9sFVmbO7Kiad6ILQiagOYQh1icHvoHtPD1LTU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">当然也有幻觉，比如这个中国美食带了日本寿司:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002305" data-ratio="0.2092436974789916" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1190" src="https://wechat2rss.xlab.app/img-proxy/?k=96d6c79d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVM78HzxDsy8T6iaZtQGpicR9sZyxEKichFManuibk0jyd8Gvs4d0mCIBaWcFNat0hYm2fKC2bxtBcnPGu4e43AuxgkS4rYxfzXBoF8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">然后弄了一个版本的SFT纠正了一下：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002307" data-ratio="0.27346041055718473" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1364" src="https://wechat2rss.xlab.app/img-proxy/?k=4f90106c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVNfDa8hA1AbuuicUfboynbexibTz0DPnapUPz2L1bZn3BSE97IJfZia9rzyQm2J0sdlSJwtk1ibBtHH751Ezo2JRk0R8icF48ECl9uM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">不过我也不知道他学了什么…可能是学到合成数据里面的拒绝语句了，对于代码题目是拒绝的</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002306" data-ratio="0.16822429906542055" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1284" src="https://wechat2rss.xlab.app/img-proxy/?k=d784365e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F1woCcbOsjVNiaoUPMbicr34atClHN1LSbgF0ATnWk5YaCV0MguHuxQPwYMfABVL2MPibeetDqzphrqKZibMlsibKuqbrAgb5L09z3ib3iaeFHBGJuA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后我们用了QWEN作为合成数据，所以这个模型自我认知里面认为自己是qwen的，我也懒得再合成一些自我认知数据去修正他的认知了，反正是做着玩的</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002308" data-ratio="0.27854195323246217" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1454" src="https://wechat2rss.xlab.app/img-proxy/?k=cee0219d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVPNAboICpgDGUHBs9j1IRXcibicJF4JLvzwgQiaCiaRox8xWDn3vsjg8wlpxD1IBTuKLUXsYwBdnNmtq0qDFWQ7VOSfhZyAiaDiagDWc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">幻觉依然是存在的，而且非常大，并且对于不懂的问题，就会变得笨笨的：</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002309" data-ratio="0.17162629757785466" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1445" src="https://wechat2rss.xlab.app/img-proxy/?k=9e5efb14&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVMMZicbkib3ltnAvvU0KXLMqKTVy0NhGjW9sGEibnN49JibXzDSqbPjnfPCc2bnuVs25eZrpkQl90tOwjztbDR2j5ER0icRQlSJHu90%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">(我们的训练集里面没有银狐木马，所以AI完全无法找到有用的东西，所以就会这样)</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总结反思</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这次一共花了5000RMB，而其实跑通后实现同样的效果的模型，只需要800rmb左右，大部分时间花费在边学边测边用上:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002310" data-ratio="0.875" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="320" src="https://wechat2rss.xlab.app/img-proxy/?k=4544ebd2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F1woCcbOsjVN8TpMBglWpE4E1S0v39wNicPDJh2GHuwVTNHdf7fbBfXAqSHvsKJgUwqMic6tAVD2uic09LBKPTqLcXevERCLjJwSA6vBgNZJQKc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这是因为我选了一个错误的路线，0.6b对于模型来说还是太大了，应该先从极小的参数开始，比如0.1b或者0.01b先做实验。实验跑通了再堆数据规模。从而避免时间/金钱的耗费。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">无论怎么样，我们都跑通了整体的路线，下次就不会那么吃瘪了，这次没有做工具调用训练以及RL以及实现COT(思维链推理)效果也是一种遗憾，因为花的钱太多了，所以先抱有遗憾的止血，等回血一波后，攒一波再来一次更好的训练，敬请关注冲鸭安全。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这边非常感谢minimind,所有想训练的人但是不是搞模型专业的人应该先复现一下这个,节约大量时间,避免跟我一样一头撞到墙上:</span><span leaf=""><br/></span><span leaf=""><a href="https://github.com/jingyaogong/minimind" target="_blank">https://github.com/jingyaogong/minimind</a></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=289a676c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485967%26idx%3D1%26sn%3D75ccdade1b71b91fdbca718b77005975">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 27 Mar 2026 10:01:00 +0800</pubDate>
    </item>
    <item>
      <title>Windows下不触发任何进程监控的创建进程</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485866&amp;idx=1&amp;sn=027c346f42696ff753a8681b2308e3c2</link>
      <description>前言这几年AI用多了,脑子坏了,比如之前写代码很容易进入心流解决问题,这个过程很爽,但是现在只会开五六个ai的</description>
      <content:encoded><![CDATA[<p>原创 <span>为了安全鸭</span> <span>2026-01-24 16:30</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=5ea60fd0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MM5rWyS7kMa8O0y2pac1CMwu95GEeZuXahuv57ey9yhsiafXlCkpmngw%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这几年AI用多了,脑子坏了,比如之前写代码很容易进入心流解决问题,这个过程很爽,但是现在只会开五六个ai的console让他帮我打工。</span><span leaf=""><br/></span><span leaf="">一开始是很急的让AI写功能，</span><span leaf=""><br/></span><span leaf="">但是到后来恨不得遇到bug，编译不通过，甚至是思考都托管给AI。</span><span leaf=""><br/></span><span leaf="">我把它叫做脑腐现象.所以为了避免这种现象,我准备用纯手工打造的方式搞点项目做。锻炼一下大脑。正巧，操作系统内核目前还是AI无法触及的领域。所以，here we go。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">内核创建进程</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以，让我们来复习一下内核创建进程，这里不会说太多的基础，因为chatgpt都能回答了。我们直接说简单一点的。我们先实现一个简单的调用ntcreateuserprocess创建进程的例子，在内核里面这需要三步:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">定位ntcreateuserprocess</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">填好参数</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">call</span></p></li></ol><p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 1.75rem;"><span leaf="">定位ntcreateuserprocess</span></h3><span leaf="">定位方式有很多，比如经典款祖传找SSDT table,但是</span><span leaf=""><br/></span><span leaf="">我是懒得定位了，直接特征码写死了:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.7611111111111111" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002178" src="https://wechat2rss.xlab.app/img-proxy/?k=ca885c51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6McmIoGvS1oYTXtg29g4joF2GjicicUibc86ib9yUKRJkzGzbOwyY7BkH1bw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">填好参数</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ntcreateuserpcoess在R3的执行的时候需要用到RtlCreateProcessParametersEx和RtlDestroyProcessParameters去填_RTL_USER_PROCESS_PARAMETERS</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.20277777777777778" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002176" src="https://wechat2rss.xlab.app/img-proxy/?k=66af4f89&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MAiacUg5Nym2svYicPm1xz6uk5YRQk1WdLPpLQCkucUptsE9IILYTgnHg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">我们R0是没有这个两个参数的，所以要自己填.填完直接call就行:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.5685185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002177" src="https://wechat2rss.xlab.app/img-proxy/?k=9d8b7976&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MTibmXfwsQBRtpicNuQ4RWJB5RFW4ZgyE1FlnjXL0R9r14VvIfUplMGAg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.14074074074074075" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002175" src="https://wechat2rss.xlab.app/img-proxy/?k=a9529ab4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6M7X4xQXBkd3hN43kC5NIibxF4ZtmZaL1PCBEmkVPJbbcibxRxzeSCou9g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">但是坑来了,</span><span leaf=""><br/></span><span leaf="">而这个RTL_USER_PROCESS_PARAMETERS 微软故意隐藏了东西，导致如果你按照微软的来写是没有办法跑起来的，跑起来会直接segment fault.这是因为没有正确的填参数,CRT初始化的时候就崩溃了。因此我写了一个R3程序，打印一下里面需要什么东西:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">// ConsoleApplication1.cpp</span><span leaf=""><br/></span><span leaf="">// Dumps the raw payload produced by RtlCreateProcessParametersEx (user-mode).</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mks1pt8l-00ye8f" style="color: #576B95 !important;" data-topic="1">#define</a> WIN32_LEAN_AND_MEAN</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mks1pt8l-lrckh7" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;windows.h&gt;</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mks1pt8m-psi5gg" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;winternl.h&gt;</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mks1pt8m-vlafyw" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;cstdint&gt;</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mks1pt8m-923evp" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;cstdio&gt;</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mks1pt8m-cu1zzv" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;string&gt;</span><span leaf=""><br/></span><span leaf="">//0x18 bytes (sizeof)</span><span leaf=""><br/></span><span leaf="">struct _CURDIR</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING DosPath;                                         //0x0</span><span leaf=""><br/></span><span leaf="">    VOID* Handle;                                                           //0x10</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span leaf="">//0x18 bytes (sizeof)</span><span leaf=""><br/></span><span leaf="">struct _RTL_DRIVE_LETTER_CURDIR</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    USHORT Flags;                                                           //0x0</span><span leaf=""><br/></span><span leaf="">    USHORT Length;                                                          //0x2</span><span leaf=""><br/></span><span leaf="">    ULONG TimeStamp;                                                        //0x4</span><span leaf=""><br/></span><span leaf="">    struct _STRING DosPath;                                                 //0x8</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span leaf="">//0x410 bytes (sizeof)</span><span leaf=""><br/></span><span leaf="">struct _RTL_USER_PROCESS_PARAMETERSEX</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    ULONG MaximumLength;                                                    //0x0</span><span leaf=""><br/></span><span leaf="">    ULONG Length;                                                           //0x4</span><span leaf=""><br/></span><span leaf="">    ULONG Flags;                                                            //0x8</span><span leaf=""><br/></span><span leaf="">    ULONG DebugFlags;                                                       //0xc</span><span leaf=""><br/></span><span leaf="">    VOID* ConsoleHandle;                                                    //0x10</span><span leaf=""><br/></span><span leaf="">    ULONG ConsoleFlags;                                                     //0x18</span><span leaf=""><br/></span><span leaf="">    VOID* StandardInput;                                                    //0x20</span><span leaf=""><br/></span><span leaf="">    VOID* StandardOutput;                                                   //0x28</span><span leaf=""><br/></span><span leaf="">    VOID* StandardError;                                                    //0x30</span><span leaf=""><br/></span><span leaf="">    struct _CURDIR CurrentDirectory;                                        //0x38</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING DllPath;                                         //0x50</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING ImagePathName;                                   //0x60</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING CommandLine;                                     //0x70</span><span leaf=""><br/></span><span leaf="">    VOID* Environment;                                                      //0x80</span><span leaf=""><br/></span><span leaf="">    ULONG StartingX;                                                        //0x88</span><span leaf=""><br/></span><span leaf="">    ULONG StartingY;                                                        //0x8c</span><span leaf=""><br/></span><span leaf="">    ULONG CountX;                                                           //0x90</span><span leaf=""><br/></span><span leaf="">    ULONG CountY;                                                           //0x94</span><span leaf=""><br/></span><span leaf="">    ULONG CountCharsX;                                                      //0x98</span><span leaf=""><br/></span><span leaf="">    ULONG CountCharsY;                                                      //0x9c</span><span leaf=""><br/></span><span leaf="">    ULONG FillAttribute;                                                    //0xa0</span><span leaf=""><br/></span><span leaf="">    ULONG WindowFlags;                                                      //0xa4</span><span leaf=""><br/></span><span leaf="">    ULONG ShowWindowFlags;                                                  //0xa8</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING WindowTitle;                                     //0xb0</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING DesktopInfo;                                     //0xc0</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING ShellInfo;                                       //0xd0</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING RuntimeData;                                     //0xe0</span><span leaf=""><br/></span><span leaf="">    struct _RTL_DRIVE_LETTER_CURDIR CurrentDirectores[32];                  //0xf0</span><span leaf=""><br/></span><span leaf="">    ULONGLONG EnvironmentSize;                                              //0x3f0</span><span leaf=""><br/></span><span leaf="">    ULONGLONG EnvironmentVersion;                                           //0x3f8</span><span leaf=""><br/></span><span leaf="">    VOID* PackageDependencyData;                                            //0x400</span><span leaf=""><br/></span><span leaf="">    ULONG ProcessGroupId;                                                   //0x408</span><span leaf=""><br/></span><span leaf="">    ULONG LoaderThreads;                                                    //0x40c</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span leaf="">// Some SDKs do not declare this prototype in user-mode headers.</span><span leaf=""><br/></span><span leaf="">using fnRtlCreateProcessParametersEx = NTSTATUS(NTAPI*)(</span><span leaf=""><br/></span><span leaf="">    _RTL_USER_PROCESS_PARAMETERSEX* pProcessParameters,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING ImagePathName,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING DllPath,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING CurrentDirectory,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING CommandLine,</span><span leaf=""><br/></span><span leaf="">    PVOID Environment,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING WindowTitle,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING DesktopInfo,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING ShellInfo,</span><span leaf=""><br/></span><span leaf="">    PUNICODE_STRING RuntimeData,</span><span leaf=""><br/></span><span leaf="">    ULONG Flags</span><span leaf=""><br/></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">using fnRtlDestroyProcessParameters = NTSTATUS(NTAPI*)(_RTL_USER_PROCESS_PARAMETERSEX ProcessParameters);</span><span leaf=""><br/></span><span leaf="">static UNICODE_STRING MakeUnicodeString(const std::wstring&amp; s)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    UNICODE_STRING us{};</span><span leaf=""><br/></span><span leaf="">    us.Buffer = const_cast&lt;PWSTR&gt;(s.c_str());</span><span leaf=""><br/></span><span leaf="">    us.Length = static_cast&lt;USHORT&gt;(s.size() * sizeof(wchar_t));</span><span leaf=""><br/></span><span leaf="">    us.MaximumLength = us.Length + sizeof(wchar_t);</span><span leaf=""><br/></span><span leaf="">    return us;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">static void HexDump(const void* data, size_t size)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    const auto* p = static_cast&lt;const unsigned char*&gt;(data);</span><span leaf=""><br/></span><span leaf="">    for (size_t i = 0; i &lt; size; i += 16) {</span><span leaf=""><br/></span><span leaf="">        std::printf(&#34;%08zx  &#34;, i);</span><span leaf=""><br/></span><span leaf="">        for (size_t j = 0; j &lt; 16; ++j) {</span><span leaf=""><br/></span><span leaf="">            if (i + j &lt; size) std::printf(&#34;%02X &#34;, p[i + j]);</span><span leaf=""><br/></span><span leaf="">            else std::printf(&#34;   &#34;);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        std::printf(&#34; &#34;);</span><span leaf=""><br/></span><span leaf="">        for (size_t j = 0; j &lt; 16 &amp;&amp; i + j &lt; size; ++j) {</span><span leaf=""><br/></span><span leaf="">            unsigned char c = p[i + j];</span><span leaf=""><br/></span><span leaf="">            std::printf(&#34;%c&#34;, (c &gt;= 32 &amp;&amp; c &lt;= 126) ? c : &#39;.&#39;);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        std::printf(&#34;\n&#34;);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">static void PrintUs(const char* name, const UNICODE_STRING&amp; us, const void* base)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    const auto baseAddr = reinterpret_cast&lt;uintptr_t&gt;(base);</span><span leaf=""><br/></span><span leaf="">    const auto bufAddr = reinterpret_cast&lt;uintptr_t&gt;(us.Buffer);</span><span leaf=""><br/></span><span leaf="">    std::wprintf(L&#34;%hs: Len=%u Max=%u Buf=%p (off=0x%Ix)  \&#34;%.*s\&#34;\n&#34;,</span><span leaf=""><br/></span><span leaf="">        name,</span><span leaf=""><br/></span><span leaf="">        us.Length,</span><span leaf=""><br/></span><span leaf="">        us.MaximumLength,</span><span leaf=""><br/></span><span leaf="">        us.Buffer,</span><span leaf=""><br/></span><span leaf="">        (bufAddr &gt;= baseAddr) ? (bufAddr - baseAddr) : 0,</span><span leaf=""><br/></span><span leaf="">        us.Length / 2,</span><span leaf=""><br/></span><span leaf="">        us.Buffer ? us.Buffer : L&#34;&#34;);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">int wmain()</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    // Example payload: create cmd.exe parameters (NOT actually launching here).</span><span leaf=""><br/></span><span leaf="">    std::wstring imagePath = L&#34;\\??\\C:\\Windows\\System32\\cmd.exe&#34;;</span><span leaf=""><br/></span><span leaf="">    std::wstring cmdLine = L&#34;\&#34;C:\\Windows\\System32\\cmd.exe\&#34;&#34;;</span><span leaf=""><br/></span><span leaf="">    UNICODE_STRING usImage = MakeUnicodeString(imagePath);</span><span leaf=""><br/></span><span leaf="">    UNICODE_STRING usCmd = MakeUnicodeString(cmdLine);</span><span leaf=""><br/></span><span leaf="">    HMODULE ntdll = ::GetModuleHandleW(L&#34;ntdll.dll&#34;);</span><span leaf=""><br/></span><span leaf="">    if (!ntdll) {</span><span leaf=""><br/></span><span leaf="">        std::printf(&#34;GetModuleHandleW(ntdll) failed: %lu\n&#34;, ::GetLastError());</span><span leaf=""><br/></span><span leaf="">        return 1;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    auto pRtlCreate = reinterpret_cast&lt;fnRtlCreateProcessParametersEx&gt;(</span><span leaf=""><br/></span><span leaf="">        ::GetProcAddress(ntdll, &#34;RtlCreateProcessParametersEx&#34;));</span><span leaf=""><br/></span><span leaf="">    auto pRtlDestroy = reinterpret_cast&lt;fnRtlDestroyProcessParameters&gt;(</span><span leaf=""><br/></span><span leaf="">        ::GetProcAddress(ntdll, &#34;RtlDestroyProcessParameters&#34;));</span><span leaf=""><br/></span><span leaf="">    if (!pRtlCreate || !pRtlDestroy) {</span><span leaf=""><br/></span><span leaf="">        std::printf(&#34;GetProcAddress failed. RtlCreate=%p RtlDestroy=%p\n&#34;, pRtlCreate, pRtlDestroy);</span><span leaf=""><br/></span><span leaf="">        return 1;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    _RTL_USER_PROCESS_PARAMETERSEX* p = nullptr;</span><span leaf=""><br/></span><span leaf="">    constexpr ULONG RTL_USER_PROCESS_PARAMETERS_NORMALIZED = 0x01;</span><span leaf=""><br/></span><span leaf="">    NTSTATUS st = pRtlCreate(</span><span leaf=""><br/></span><span leaf="">        (_RTL_USER_PROCESS_PARAMETERSEX*)&amp;p,</span><span leaf=""><br/></span><span leaf="">        &amp;usImage,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        &amp;usCmd,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        nullptr,</span><span leaf=""><br/></span><span leaf="">        RTL_USER_PROCESS_PARAMETERS_NORMALIZED);</span><span leaf=""><br/></span><span leaf="">    std::printf(&#34;RtlCreateProcessParametersEx -&gt; 0x%08X, p=%p\n&#34;, static_cast&lt;unsigned&gt;(st), p);</span><span leaf=""><br/></span><span leaf="">    if (st &lt; 0 || !p)</span><span leaf=""><br/></span><span leaf="">        return 1;</span><span leaf=""><br/></span><span leaf="">    // Raw payload dump (what you&#39;d want to mirror in kernel if you&#39;re hand-building).</span><span leaf=""><br/></span><span leaf="">    HexDump(p, sizeof(_RTL_USER_PROCESS_PARAMETERSEX));</span><span leaf=""><br/></span><span leaf="">    //pRtlDestroy(p);</span><span leaf=""><br/></span><span leaf="">    return 0;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.6175925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002179" src="https://wechat2rss.xlab.app/img-proxy/?k=d7d7053f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MBYo79MCpxqZH03S7ctkgwtVIFsb0avYEhc9OTOOo0MzHm9O2Ocs9Ng%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.5138888888888888" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002180" src="https://wechat2rss.xlab.app/img-proxy/?k=f54e066a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MEeiaWDlEgibZYsVlibOH4oJX0XLib2ibNZjcxz9kl5vhWRTpzTmUSuBWGjA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">实际上，缺失的内容是，我们需要填工作目录，并且要有完整的结构体:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">//0x18 bytes (sizeof)</span><span leaf=""><br/></span><span leaf="">struct _CURDIR</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING DosPath;                                         //0x0</span><span leaf=""><br/></span><span leaf="">    VOID* Handle;                                                           //0x10</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span leaf="">//0x18 bytes (sizeof)</span><span leaf=""><br/></span><span leaf="">struct _RTL_DRIVE_LETTER_CURDIR</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    USHORT Flags;                                                           //0x0</span><span leaf=""><br/></span><span leaf="">    USHORT Length;                                                          //0x2</span><span leaf=""><br/></span><span leaf="">    ULONG TimeStamp;                                                        //0x4</span><span leaf=""><br/></span><span leaf="">    struct _STRING DosPath;                                                 //0x8</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span leaf="">//0x410 bytes (sizeof)</span><span leaf=""><br/></span><span leaf="">struct _RTL_USER_PROCESS_PARAMETERSEX</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    ULONG MaximumLength;                                                    //0x0</span><span leaf=""><br/></span><span leaf="">    ULONG Length;                                                           //0x4</span><span leaf=""><br/></span><span leaf="">    ULONG Flags;                                                            //0x8</span><span leaf=""><br/></span><span leaf="">    ULONG DebugFlags;                                                       //0xc</span><span leaf=""><br/></span><span leaf="">    VOID* ConsoleHandle;                                                    //0x10</span><span leaf=""><br/></span><span leaf="">    ULONG ConsoleFlags;                                                     //0x18</span><span leaf=""><br/></span><span leaf="">    VOID* StandardInput;                                                    //0x20</span><span leaf=""><br/></span><span leaf="">    VOID* StandardOutput;                                                   //0x28</span><span leaf=""><br/></span><span leaf="">    VOID* StandardError;                                                    //0x30</span><span leaf=""><br/></span><span leaf="">    struct _CURDIR CurrentDirectory;                                        //0x38</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING DllPath;                                         //0x50</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING ImagePathName;                                   //0x60</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING CommandLine;                                     //0x70</span><span leaf=""><br/></span><span leaf="">    VOID* Environment;                                                      //0x80</span><span leaf=""><br/></span><span leaf="">    ULONG StartingX;                                                        //0x88</span><span leaf=""><br/></span><span leaf="">    ULONG StartingY;                                                        //0x8c</span><span leaf=""><br/></span><span leaf="">    ULONG CountX;                                                           //0x90</span><span leaf=""><br/></span><span leaf="">    ULONG CountY;                                                           //0x94</span><span leaf=""><br/></span><span leaf="">    ULONG CountCharsX;                                                      //0x98</span><span leaf=""><br/></span><span leaf="">    ULONG CountCharsY;                                                      //0x9c</span><span leaf=""><br/></span><span leaf="">    ULONG FillAttribute;                                                    //0xa0</span><span leaf=""><br/></span><span leaf="">    ULONG WindowFlags;                                                      //0xa4</span><span leaf=""><br/></span><span leaf="">    ULONG ShowWindowFlags;                                                  //0xa8</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING WindowTitle;                                     //0xb0</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING DesktopInfo;                                     //0xc0</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING ShellInfo;                                       //0xd0</span><span leaf=""><br/></span><span leaf="">    struct _UNICODE_STRING RuntimeData;                                     //0xe0</span><span leaf=""><br/></span><span leaf="">    struct _RTL_DRIVE_LETTER_CURDIR CurrentDirectores[32];                  //0xf0</span><span leaf=""><br/></span><span leaf="">    ULONGLONG EnvironmentSize;                                              //0x3f0</span><span leaf=""><br/></span><span leaf="">    ULONGLONG EnvironmentVersion;                                           //0x3f8</span><span leaf=""><br/></span><span leaf="">    VOID* PackageDependencyData;                                            //0x400</span><span leaf=""><br/></span><span leaf="">    ULONG ProcessGroupId;                                                   //0x408</span><span leaf=""><br/></span><span leaf="">    ULONG LoaderThreads;                                                    //0x40c</span><span leaf=""><br/></span><span leaf="">};</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">再然后稍微的手工填一下，这一步很想用AI忍不住了:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.899074074074074" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002181" src="https://wechat2rss.xlab.app/img-proxy/?k=af71de87&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6M7ZCsh2oMB9QOgXP5eA3kHn6KsDdibmOPMlV1dxDmuMGU7xYyiczlBnDw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">call it!</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后我们就跑起来了</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.4065040650406504" data-type="png" data-w="615" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002184" src="https://wechat2rss.xlab.app/img-proxy/?k=9dea57a2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MSR1fyw1U1cuia89jYd9XDXLVwhtjVETibHjWM7FUz9fKELhFJ6fnqgmg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">但是这个有第二个问题，结束了就会蓝屏:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.587037037037037" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002186" src="https://wechat2rss.xlab.app/img-proxy/?k=4b1134a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MK4TYnXAhQ297aNUWBX6CoA7fjcBq9j3E5wB4Kw3Y9KMXtLE5bD9eiaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">让我们调查一下,根据信息,错误代码在结束时候,</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.3222748815165877" data-type="png" data-w="633" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002183" src="https://wechat2rss.xlab.app/img-proxy/?k=417c695f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6M6icrJ0WraxAm2ic19Xqxpwy1MeAXZEnia5j4VvQjBKDeKbYloLqMjYBLg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">执行MmSessionGetWin32Callouts的时候:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">.text:000000014008A220                                     MmSessionGetWin32Callouts proc near     ; CODE XREF: NtDeleteAtom+F↓p</span><span leaf=""><br/></span><span leaf="">.text:000000014008A220                                                                             ; PsConvertToGuiThread:loc_14060BEFE↓p ...</span><span leaf=""><br/></span><span leaf="">.text:000000014008A220 65 48 8B 04 25 88 01 00 00                          mov     rax, gs:188h</span><span leaf=""><br/></span><span leaf="">.text:000000014008A229 48 8B 88 B8 00 00 00                                mov     rcx, [rax+0B8h]</span><span leaf=""><br/></span><span leaf="">.text:000000014008A230 48 8B 81 00 04 00 00                                mov     rax, [rcx+400h]</span><span leaf=""><br/></span><span leaf="">.text:000000014008A237 48 83 B8 C0 03 00 00 02                             cmp     qword ptr [rax+3C0h], 2</span><span leaf=""><br/></span><span leaf="">.text:000000014008A23F 48 8D 05 52 E7 3A 00                                lea     rax, PsWin32CallBack</span><span leaf=""><br/></span><span leaf="">.text:000000014008A246 73 07                                               jnb     short locret_14008A24F</span><span leaf=""><br/></span><span leaf="">.text:000000014008A248 48 8D 05 41 E7 3A 00                                lea     rax, PsWin32NullCallBack</span><span leaf=""><br/></span><span leaf="">.text:000000014008A24F</span><span leaf=""><br/></span><span leaf="">.text:000000014008A24F                                     locret_14008A24F:                       ; CODE XREF: MmSessionGetWin32Callouts+26↑j</span><span leaf=""><br/></span><span leaf="">.text:000000014008A24F C3                                                  retn</span><span leaf=""><br/></span><span leaf="">.text:000000014008A24F                                     MmSessionGetWin32Callouts endp</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而这个MmSessionGetWin32Callouts读</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">cmp     qword ptr [rax+3C0h], 2</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">的时候蓝屏了，这说明我们有什么东西没初始化。寻找这玩意的最好的办法是,ida搜索[rax+3C0h]访问的特征码:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.46296296296296297" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002185" src="https://wechat2rss.xlab.app/img-proxy/?k=d357edb6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MXcmbq2F34LTCN7thePfOicKBbEvEhnsUdxHUgMpEyEWYX4LBxZe1oag%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">根据特征码找一下cal，可以定位到，这个是在初始化win32k pfn的时候填的东西</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.5916666666666667" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002187" src="https://wechat2rss.xlab.app/img-proxy/?k=aed75c47&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MegV8svIfBgibF52LzyK8iaJiaaJ58VQATEFnCPqcI8H8TuT89cV6icXibAw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">就不卖关子了,我直接说为什么:</span><span leaf=""><br/></span><span leaf="">在操作系统创建进程时，分配进程内存和初始化进程的pfn的时候，会考虑进程的会话和上下文信息，以决定是否允许该进程访问 win32k 的pfn。而我们是直接在系统线程启动的进程，自然就没这些信息。</span><span leaf=""><br/></span><span leaf="">解决方法是附加到一个带界面的信息，比如我附加到资源管理器，这样会话也会自动分配到1而不是0:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.7212962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002188" src="https://wechat2rss.xlab.app/img-proxy/?k=150ccc6f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MX5xibySpTUoM4ZUY4vlQ2xWPfK00cUtX5UHXC21HTqsZvEfKg25dibXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这样你结束就不会蓝屏了，至此我们成功的实现了内核创建进程</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.4601851851851852" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002189" src="https://wechat2rss.xlab.app/img-proxy/?k=b783f857&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MgSCgrLsTdsgUh9rptERVH4V2iadJmIAYR5J04ic4ib3lvrRotOKUAeTqQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">进程回调</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我们在</span><span leaf=""><br/></span><span leaf="">《[2022]新瓶装旧酒: 微软CreateProcessNotify的设计缺陷》</span><span leaf=""><br/></span><span leaf=""><a href="https://key08.com/index.php/2022/10/12/1606.html" target="_blank">https://key08.com/index.php/2022/10/12/1606.html</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">中提到过 进程创建会触发createprocessnotify回调，这也是现在很多安全软件所用来监控进程创建的回调。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.4685185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002191" src="https://wechat2rss.xlab.app/img-proxy/?k=400fc1c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MGJTiaYWokrrdKkX7WGdBZlvZCM19T0fu6rH9MvickzEsAibibo3eZyHv3w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而这些回调会加入到PspCreateProcessNotifyRoutine里面.在有进程创建的时候，会被逐个执行</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.3675925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002194" src="https://wechat2rss.xlab.app/img-proxy/?k=5b7b0b76&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MQZkXeFhFvN0vGqeFR6lrozwDP4ywcDyqKe8Evr2UHxmaHlIx4y3FRw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这些call最后被”PspCallProcessNotifyRoutines”这个执行:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.3675925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002190" src="https://wechat2rss.xlab.app/img-proxy/?k=306fb36e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MoH2QnKyaPPicZvuscYIXMSuPDbzhKCFpp46YIW62UdqSQeVdEiaRVib1g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.649074074074074" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002193" src="https://wechat2rss.xlab.app/img-proxy/?k=6f721d51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MJKvGeiaMuQv5n9WZ2ibS6UPOLZh7y0vxhqQTeic7VZtE8MF666H3Eibatg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">so，有什么不搞DKOM的方法去不触发此类回调呢？有的兄弟，有的，那就是CPU模拟</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">AMD64 CPU模拟器</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">既然我们控制不了系统的执行流程，那么我们就不控制了，我们自己模拟一个CPU进行执行，只不过给的是真实的信息数据，唯一区别是，在执行PspCallProcessNotifyRoutines的时候,我们就跳过,其他时候跟操作系统一样就行。输入输出完全一样。</span><span leaf=""><br/></span><span leaf="">至于系统的call,我们除了PspCallProcessNotifyRoutines其他的就直接转发。这样我们就能达到目的。</span><span leaf=""><br/></span><span leaf="">如果不理解，这里有一个简单的图：</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.6157965194109772" data-type="png" data-w="747" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002192" src="https://wechat2rss.xlab.app/img-proxy/?k=d71991ac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6M0UtP46ThgaUMLV31gzkrhf70iad1q4JD26kkYQNSdjbvI7rwb3eJWhA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">架构设计</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我这边就最简单的zydis了，手搓的不需要太复杂。一个简单的X86虚拟就只需要指令行为模拟和栈就行，遇到call，我们要么选择转发，要么选择接管。</span><span leaf=""><br/></span><span leaf="">简单来说</span></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">初始化X64的vCpu</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.3825136612021858" data-type="png" data-w="732" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002195" src="https://wechat2rss.xlab.app/img-proxy/?k=b5d8a716&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MGUJKfSr8p9f6kDpAcibrs9Ub6gzAn5X3wWiaOHCr7Z3Uw2A5bfx4rNog%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">一次性decode 15字节</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.8064814814814815" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002197" src="https://wechat2rss.xlab.app/img-proxy/?k=51e4a350&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6M9pHIczrnEk4CGUJQZfSMnNOx6GIviafSFAzh5Qg8rbBfibQuBCjI5EYA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">decode后，根据指令读取/写入不同的内存</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.8527777777777777" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002198" src="https://wechat2rss.xlab.app/img-proxy/?k=3a29f9ed&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MDkuOov9wDzHRzvjISnYeWVynl2yy54EOacmQMK27aFOhJg8nKB76SQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">比如mov rax,那就是给vcpu写入值</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.34814814814814815" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002199" src="https://wechat2rss.xlab.app/img-proxy/?k=e4c19975&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6ME9fCAXT2UVrJOe9KKGpIVEfNPpHBHPLjcdzOa7A9ViaQSauUibwq32Fg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这一段让AI干了，纯苦力牛马活，没AI干不动</span><span leaf=""><br/></span><span leaf="">值得注意的是，一些指令会影响elflags,所以也记得让AI干好,AI会忽略这些影响elfags的指令:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.7175925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002196" src="https://wechat2rss.xlab.app/img-proxy/?k=6f717f7c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6Mxe2zFByT722F7icrR7ksy7drjnUemyUOMQIicVZJ2lZd16rBiajSPK6HQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">执行他</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">之后就能愉快的把参数PUSH到vm里面并且执行了</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.5675925925925925" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002203" src="https://wechat2rss.xlab.app/img-proxy/?k=b52a7fff&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MAOaMUGXEsxgEsRNG0vHtmhicYOUTzkaPVYvZ1FmVaCnoFPxiaXVt3Rjw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">值得注意的几个问题是，遇到cfg guard的时候,不要虚拟执行,因为CFG guard的bitmap会校验来源,我们的这种call肯定是非法的。最好的办法是跳过他如何call cfg,我之前手写的时候跳过是硬编码地址,但是GPT说有更好的,嗯…直接硬编码</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.262037037037037" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002201" src="https://wechat2rss.xlab.app/img-proxy/?k=777951da&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6M2YHBlvw38qEFe7VWTHL80OzCF60uvFD19jzIZKWvxuelQ2P1uKmdpw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">如果遇到了直接跳过就行</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.16412213740458015" data-type="png" data-w="1048" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002200" src="https://wechat2rss.xlab.app/img-proxy/?k=1b08d80b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MccFiaWAGxa09UicWqc8nbvDPVPb9q4lXJgGOS6yuTtYVGPvoUA25AicgA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">call转发我之前也想的是人模拟参数,但是GPT给了一个更野的,直接全参数call,爱用哪个用哪个:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.625" data-type="png" data-w="592" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002202" src="https://wechat2rss.xlab.app/img-proxy/?k=102fc246&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6Mompia6S4V8hP4V07Iiau0q9MQI2fYLC383pT6Qu01YL8WYiclvLWT9osQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">还得是AI,真的野，</span><span leaf=""><br/></span><span leaf="">此外我们设置返回地址为0，这样当模拟执行到0的时候，代表执行完成了。</span><span leaf=""><br/></span><span leaf="">我们来试一下直接模拟+call转发的:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.3453703703703704" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002204" src="https://wechat2rss.xlab.app/img-proxy/?k=61fa74ad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MFeK3XU8Jp0snlB4Yjf1m7Aeb5iaJWe4w3HRVcOyKkPW9ZibErB0ic69gg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">可以看到,我们成功的运行了。</span><span leaf=""><br/></span><span leaf="">接下来跳过指定的函数,这也非常容易,我们直接跳过并且返回一个自定义的rax就行,我们跳过的是PspCallProcessNotifyRoutines,他不会修改传递的参数里面的内容,所以简单点就行:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.2657407407407407" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002208" src="https://wechat2rss.xlab.app/img-proxy/?k=70737e0d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6Mr89atJNkDam8hAH8e2E3lXe4EBRk8FNBvfsoaNmibgT14O4Wzqcz1DA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这样我们就实现了完整跳过内核回调了</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结果</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">让我们写个简单的createprocess回调看看，他会捕获所有cmd的执行</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002206" data-ratio="0.9682242990654205" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1070" src="https://wechat2rss.xlab.app/img-proxy/?k=721b41e6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MMOqc9JKIOQ5nVC6oyEnlIjk5kNcmxexLXaicrAjqAnP2bYGOhOUancA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">当我们执行cmd的时候,他会执行:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.08565928777670838" data-type="png" data-w="1039" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002207" src="https://wechat2rss.xlab.app/img-proxy/?k=cab32190&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6MkYFrXOIoE1VfoKNznicts7kkRibrmdIbUribqUtVZf4REqVON1FJPPIibw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">我们试试，传统内核直接ntcreateuserprocess:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">很明显,因为会触发PspCallProcessNotifyRoutines,导致我们被发现:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.3351851851851852" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002205" src="https://wechat2rss.xlab.app/img-proxy/?k=18fe9be1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6McYoI6TeeKYFDmiazfHRHkVYUc2rcXHniaaTSysvu5DCwyLUStn4zQydg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而使用cpu模拟的ntcreateuserprocess,不会触发内核的进程回调的:</span><span leaf=""><br/></span><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.325" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-imgfileid="100002209" src="https://wechat2rss.xlab.app/img-proxy/?k=c403869a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLGKcY4e7q0ANGY1jt6sG6Mu0Ez6qXQrSgmuIASH055W3DjL1pC9TAHmvwRfR56R8CreDy9K8iacLA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">so…可能好奇的你问,这有什么用.</span><span leaf=""><br/></span><span leaf="">此技术有三个用途:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一个是反作弊,总所周知,部分外挂会通过这些进程创建回调等回调,去拿真实的CR3或者做进程APC注入.而部分反作弊使用这种技术去不触发这些系统的回调启动游戏进程实现保护的效果</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二个是,目前绝大部分安全软件,都是基于</span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">PspCallProcessNotifyRoutines</span></code><span leaf="">里面的回调创建</span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">进程管理器</span></code><span leaf="">的,一旦一个进程不在安全软件自己的</span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">进程管理器里面</span></code><span leaf="">,会导致安全软件</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">无法监控到这个进程所有的行为</span></strong><span leaf="">,虽然有些脱裤子放屁的嫌疑,因为都驱动了都可以各种手段致盲安全软件了。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第三个是,他本来就没什么用,就跟大部分东西一样,写了就是为了提高自己技术.不要以”有什么用”去做某件事,要以”好玩就行”去做某件事。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=42dcfde2&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485866%26idx%3D1%26sn%3D027c346f42696ff753a8681b2308e3c2">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 24 Jan 2026 16:30:00 +0800</pubDate>
    </item>
    <item>
      <title>现代windows内存攻防简介(2026年)</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485822&amp;idx=1&amp;sn=93390a5b33f43d4822bb76b04a6ee436</link>
      <description>简介又过一年了兄弟们，是时候更新冲鸭安全和key08了。主要是1月太忙了，一直忙着新产品，一直没空更新公众号和博客，趁着现在有空赶紧更新一波。</description>
      <content:encoded><![CDATA[<p>原创 <span>为了安全鸭</span> <span>2026-01-13 09:00</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=e3e3d85f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfiarPowJd4nnyHQCzCyyxG26m2nH5hv1xr3FLt2HqsBkeibogxsNQnazA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">简介</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">又过一年了兄弟们，是时候更新冲鸭安全和key08了。主要是1月太忙了，一直忙着新产品，一直没空更新公众号和博客，趁着现在有空赶紧更新一波。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">shellcode</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安全软件对抗中,常用shellcode作为规避杀毒软件文件查杀的办法,因为shellcode可以内存执行,可以随时抹掉,并且容易变形.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">一段经典的shellcode loader如下:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">    char* shellcode = (char*)VirtualAlloc(</span><br/><span leaf="">        NULL,</span><br/><span leaf="">        shellcode_size,</span><br/><span leaf="">        MEM_COMMIT,</span><br/><span leaf="">        PAGE_EXECUTE_READWRITE);</span><br/><span leaf="">    CopyMemory(shellcode, buf, shellcode_size);</span><br/><span leaf="">    //CreateThread函数，创建线程</span><br/><span leaf="">    hThread = CreateThread(</span><br/><span leaf="">        NULL, // 安全描述符</span><br/><span leaf="">        NULL, // 栈的大小</span><br/><span leaf="">        (LPTHREAD_START_ROUTINE)shellcode, // 函数</span><br/><span leaf="">        NULL, // 参数</span><br/><span leaf="">        NULL, // 线程标志</span><br/><span leaf="">        &amp;dwThreadId // 若成功，接收新创建的线程的线程ID DWORD变量的地址。</span><br/><span leaf="">    );</span></code></pre><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">如果你对”他发生了什么”感兴趣自己问chatgpt的VAD/PTE吧,这里我们不废话介绍原理了.</span></p></blockquote><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">一般检测</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">现代的杀毒软件/或者EDR,对于这分配内存,一般会扫一下VAD里面的rwx</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002155" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9ba67bcd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfWtZRhTtYabzVEXEgADD1Ha5o7Eghrz2zVALicib2Ug25EhvUmWwByeSQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">代码如下:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">MEMORY_BASIC_INFORMATION mbi = { 0 };</span><br/><span leaf="">        SIZE_T address = 0;</span><br/><span leaf="">        while (VirtualQueryEx(hProcess.get(), reinterpret_cast&lt;LPCVOID&gt;(address), &amp;mbi, sizeof(mbi)) == sizeof(mbi))</span><br/><span leaf="">        {</span><br/><span leaf="">            // 排除模块映像段</span><br/><span leaf="">            if (mbi.Type != MEM_IMAGE)</span><br/><span leaf="">            {</span><br/><span leaf="">                // 检查是否可执行</span><br/><span leaf="">                DWORD protect = mbi.AllocationProtect;</span><br/><span leaf="">                bool checkExecuteFlag =</span><br/><span leaf="">                    (protect &amp; PAGE_EXECUTE) ||</span><br/><span leaf="">                    (protect &amp; PAGE_EXECUTE_READ) ||</span><br/><span leaf="">                    (protect &amp; PAGE_EXECUTE_READWRITE) ||</span><br/><span leaf="">                    (protect &amp; PAGE_EXECUTE_WRITECOPY);</span><br/><span leaf="">                if (checkExecuteFlag)</span><br/><span leaf="">                {</span><br/><span leaf="">                    .....</span><br/><span leaf="">                    if (!memoryAvEngin-&gt;ScanProcessBlocks(memoryStreamPtr, false, callback)) {</span><br/><span leaf="">                        printf(&#34;ScanProcessBlock error&#34;);</span><br/><span leaf="">                    }</span><br/><span leaf="">                    .....</span><br/><span leaf="">                }</span><br/><span leaf="">            }</span><br/><span leaf="">            // 跳到下一个内存区域</span><br/><span leaf="">            address = reinterpret_cast&lt;SIZE_T&gt;(mbi.BaseAddress) + mbi.RegionSize;</span><br/><span leaf="">        }</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">由于VirtualAlloc分配的内存是RWX属性并且不是MEM_IMAGE,所以会被扫出来后匹配特征码。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">缺陷</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">实际上，与大家想的不同，安全软件通常不会直接报RWX为病毒(不过部分**EDR会这样做)。这个原因是 实际环境中，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">基本每个电脑都会或多或少的有几个RWX内存，jit，广告软件，部分加壳软件居多。</span></strong><span leaf="">所以杀毒软件不会看到就报，他一定匹配特征码，并且做匹配:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">比如ES的yara为例子:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a href="https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_CobaltStrike.yar" target="_blank">https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_CobaltStrike.yar</a></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002154" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=01c74a3e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUf8Fia1QRicMje3PNfexCUKL0lrLiaARYtVb1jryiccqLTqt1icibolvyJsr9g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">他不能看到就直接告警，会出现严重问题。必须依赖特征码，并且还有一个致命问题: 依赖进程有RWX的内存，否则就扫不到了。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">总结一个痛点是，必须要能扫到RWX内存，并且必须要匹配特征.</span></strong></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以,这种其实后来演变到所谓的”自研C2”/“二开CS”/“SleepMask”。为什么他们能工作的重要原因是,自研/二开的马，没有被拉黑特征，而Sleepmask等一派的东西，他们在休眠的时候是把RWX内存去掉了X属性甚至是混淆了shellcode，导致上面的遍历VAD的代码失效了</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">升级检测</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在前面的一般检测遇到瓶颈后，安全厂商发明了新的办法，为了解决前面的所谓的匹配不到RWX的问题,可以用更激进的手段.这边有几种手段:</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SleepMask: 检测所谓的RWX切换</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">部分厂商,比如ES通过TI-ETW检测virtualprotect的切换RWX内存，这样就检测了所谓的SleepMask因为这玩意会切换内存，这挺草台的说实在的，但是能用就不深入说了</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">不依赖特征: 检测shellcode API调用</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">为了更好的时机去检测,部分厂商使用API HOOK,去挂钩某些SYSCALL或者某些关键API，挂钩后，检测调用是否来自Shellcode,如果是直接拦截或者阻止,而且不止API调用,也能通过TIETW拿到某些来自shellcode的call从而检测.</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">对这块感兴趣的我强烈建议你购买一份冲鸭安全的EPP开发教程,此事在EPP开发里面有提到</span></p></blockquote><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">缺陷</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">这几个检测手段的缺陷同样有问题,有几个问题:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">盲目检测误报大 -生产环境几乎不能用,比如某些严格点策略的组织连x神游戏都打不开,打开直接被拦截.</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">为了消除误报,依然使用特征码 -虽然解决了SleepMask导致获取不到shellcode的问题,但是为了减少误报,依然会用特征码尝试对shellcode进行匹配,否则是没办法上生产环境的,依然会被自研C2绕过</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">各种花式syscall直接调用，ntdll unhook，调用栈欺骗绕过API的钩子</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002158" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=34118d36&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfmtQLBnickxMQJU4NwI3iboFfK8HibLkVQITuIzhF2103qAcaB4zUlHGXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p></li></ol><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">继续升级检测</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">大部分厂商在前面两个阶段就停止对抗了,毕竟用户电脑不是战场,而且手段越多误报越多,不方便运维.但是</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">部分好一点的厂商为了解决以上的手段,继续加码,对抗到底:</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">首先,使用CET技术或者其他调用栈完整性校验技术,去检测异常调用栈,这里分两种,常见是软件类的,不太常见的是硬件类的.先说硬件类型的:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">CET技术:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002159" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=40d882f5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfrhqI8t4r4R6MOPq1FibnR6IKIPicm7iaI0eZKm98SIDasbTxmLYvUA2bg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Intel Processor Trace技术:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002161" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=66f67f24&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfib98YcFTVo3MkJvCtSkIJOx5RgZQwic0fQnbeaicUibu1wiaYvVRV6mj24A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">软件类型的:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">[2025]SleepDuck-通用堆栈欺骗检测POC,检测SleepMask</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485281&amp;idx=1&amp;sn=104dc45d47d49fb79648230372f522af&amp;scene=21#wechat_redirect" textvalue="SleepDuck：通用堆栈欺骗检测POC,检测SleepMask" data-itemshowtype="0" linktype="text" data-linktype="2">SleepDuck：通用堆栈欺骗检测POC,检测SleepMask</a></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">TI-ETW结合调用栈:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002160" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3459207b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfhHxrJRzFBloIlQo40TRnYKibmesNEFCAN5gicuyjPLfUa9vAiazZOltvA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">天守EDR的动态指令追踪技术:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002157" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d54f95a3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfbxvcIUsXEQmU2330697aKWlZZ6uWMm4x1Lt6xM5sqVCOEPVScvLsYg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">结合虚拟执行,检测调用栈完整性:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002162" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=23f67ac5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfwHxS24a7fQz7s9ToeXvaqzGHCFuau86RVSm8VhBpY8PiaexL5mUQuGw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">此类软/硬技术结合</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf=""> 就保证了获取的调用栈是真实可靠的,而不是被欺骗的.</span></strong><span leaf="">并且无法通过摘钩进行绕过.反而摘钩/栈欺骗会导致被检测.</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">缺陷</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">此类技术,有严重的缺陷,基于硬件的需要硬件达标,暂且不提</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">基于软件的技术,只能EDR来处理数据,EPP是处理不了这些数据的,处理了也会卡本机系统,因此只能在EDR上使用此类技术,成本没有办法降低.</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">因此实际做到这一层的很少,实践中也遇到的非常少,总的来说因为成本太大,此类操作不太符合目前的安全市场行情</span></strong></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">下一代展望</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这里多扯几句，如果我以后还在干安全,并且让我来设计下一代怎么检测shellcode内存加载的操作的话,我会先思考两个问题,我们需要解决什么问题? 我们需要怎么做才能彻底解决他?</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当前所有的检测主要有几个痛点:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">检测成本太高</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">无论什么手段,为了防止误报,依然无法离开基于特征码的检测</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">其实整篇文章我故意忽略了一个细节,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">那如果我们不放到RWX内存呢,会怎么样?</span></strong><span leaf="">答案是全部拉闸,如果你了解外挂就会知道,外挂喜欢找代码洞把shellcode塞到文件段里面,这样就扫不到了.除非更进一步做CRC内存-&gt;文件完整性校验,那样成本更高了.</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以,要是让我来搞,我一定会选择语义检测，在如今全是LLMs的时代,我们不能再抱着传统不放手.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这是有可能的,我们完全可以这样做:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">把shellcode/调用堆栈/等代码变成HLIL,类似于IDA的伪代码一样</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">把HLIL送到transformer-base的二分类器里面,就跟以前古早时期那种什么AI检测说的话是不是恶意的话一样.剩下的等结果就行,整个过程非常快,因为不是大模型,是小小模型.</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这样会解决如下问题:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">基于语义的分析,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">即便是不用AI,也能用规则驱动检测</span></strong><span leaf="">,比如检测PEB直接寻找的shellcode,比如检测shellcode里面的内容到底是在干什么,是混淆还是什么</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">能检测出不放到RWX段的shellcodes,因为他不需要关心是不是RWX,输入应该是调用栈的各个地址就能开始检测,并且由于没有特征匹配的环节,所以他的速度非常非常的快.</span></p></li></ol><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">扩展阅读(广告)</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">我提到的语义分析目前真的不是什么技术难题,shellcode2hlil的引擎已经有了: </span></strong><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002163" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=fd0890eb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfYHII1DbeYCTFcVMfseicbxqqUXz4t0aBUxVBln9yJm4gsMFSUiaTVyzA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">[2025]在线样本分析平台,下一代文件云鉴定</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485767&amp;idx=1&amp;sn=2527efc71f3493583fa34c43a7eeec23&amp;scene=21#wechat_redirect" textvalue="大模型的病毒木马文件云鉴定平台(粉丝内测)" data-itemshowtype="0" linktype="text" data-linktype="2">大模型的病毒木马文件云鉴定平台(粉丝内测)</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">剩下的就是训练一个transformer分类器就行.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">本系统已经有部分应用,不过目前接的是大模型,还没接transformer分类器,可以先用着,目前开放体验(还没开放shellcode/elf的检测,只开放了PE的):</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485757&amp;idx=1&amp;sn=6a9abd8c76b5537f73f64671ff48a7e7&amp;scene=21#wechat_redirect" textvalue="基于大模型的病毒木马文件云鉴定" data-itemshowtype="0" linktype="text" data-linktype="2">基于大模型的病毒木马文件云鉴定</a></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">目前对于PE的效果非常好,同时其实平台也支持ELF和SHELLCODE,但是我现在暂时没开放,还需要调试这两个</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">比如VT 1报毒的木马:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002165" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c66c114e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUf2BFCBdrjtKv54icLIdqlorHOh5oQm9etnXpchicQy4tXYotzVrdicGVibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002164" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=670c0c4c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfsb8S8shejOZqKvIk5LSuCXXXLvsCU2v8FBibfdHb8EOSejdREOiblVwQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">常规ghost:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002166" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=89c7ac3b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfQYWvHS4BIvVqrOUQ8ybGEicia2Lib7Ddy7pibGjia1qCaqvImR75HLuiaW6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">c#:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002168" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c5e9a3ef&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfmRQ8T54LFOwyjtSvPLcFuIvibvOyqcFL6viaNhV7ZODAcVRC18ic8d7hg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">混淆:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002170" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9c0406dd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUftyXNVCM7EKiaO0R53KGXLIlL1ic8IW6QQxvGkWNRiaqciaJ2cOj6ecbLsg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">重要的是,核心引擎只有6M,6M还是因为我带了一个libcurl</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002167" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c37a325d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfRCbxYtZdtb5Fgpg7n5Nwvphic9Luyq2xvvl5PDeictJ3vJl3Nm0rtVibA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以下一步,完全可以携带到客户端,做shellcode分析/病毒分析等.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100002169" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9b543bda&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLiaoSiaatuXoGtnHaD0qljUfKUTQLVFfaiaDsnNVkXX5Xe2xOK7WkAk5mkiaibPnia3WjK0K00FDG6ePhg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=6e29f660&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485822%26idx%3D1%26sn%3D93390a5b33f43d4822bb76b04a6ee436">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 13 Jan 2026 09:00:00 +0800</pubDate>
    </item>
    <item>
      <title>大模型的病毒木马文件云鉴定平台(粉丝内测)</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485767&amp;idx=1&amp;sn=2527efc71f3493583fa34c43a7eeec23</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2025-12-24 21:17</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=9ccd09bd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4wReVxeSZanq20wJEZzOHPficQD68HTSuRcqXp7wFZhS3k7rEjuVjeyA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf="">上一篇文章说到的</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485757&amp;idx=1&amp;sn=6a9abd8c76b5537f73f64671ff48a7e7&amp;scene=21#wechat_redirect" textvalue="基于大模型的病毒木马文件云鉴定" data-itemshowtype="0" linktype="text" data-linktype="2">基于大模型的病毒木马文件云鉴定</a></span></p><p><span leaf="">目前有粉丝内测平台了</span></p><p><span leaf="">微信回复 &#34;分析</span><span leaf="">平台</span><span leaf="">&#34; 得到访问地址</span></p><p><span leaf="">目前只支持PE文件, 这个服务器是一个1H 512M的机器 不要狠蹬</span></p><p><span leaf="">平台亮点</span></p><p><span leaf="">支持AI分析,智能出结果,准确率高,有可解释性:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002112" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=938a2a5e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4Eqj5icjG1Jg1NrPvicK3tOgtgZ40oacicwx4Pyoae5tKGlNlJ2IV9NqCg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002114" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0f28df88&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4A1BEEBMJvM6LcZOIq5bOTlKlicTueTnEnwrmzAmicvsKT2x7UW1aOD5Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002113" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=407866e3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4CvGLcT3yOneicsoFbeoDobGGUwtEuQJC0kw4FkjmmtkeVlMgoqP8vCg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002115" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=7f7f1729&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4hl6cE5Ijc67PzfFjs1JDM5FjzeUtic1PYOhvT9ic5ZKBO5YzsPXDElicA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">反汇编:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002116" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=06832ee4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4mgBmYrt3WX4LibSNKIxGDR3Vgwl0mDialByDam3fKIoevgScEGOkc6bQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-pm-slice="2 1 []"><span leaf="">有任何问题加群反馈(误报/不报):</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002111" data-ratio="1.0609756097560976" data-s="300,640" type="block" data-type="png" data-w="410" src="https://wechat2rss.xlab.app/img-proxy/?k=00bd1cb3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJoCw7zMsqpibxLruv5xuicq4X9oNeYgjQvYxCooX8ianwqAyrXezibn2MtzAZSmIjm6ugcCP8tPy9y3w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=57710e24&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485767%26idx%3D1%26sn%3D2527efc71f3493583fa34c43a7eeec23">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 24 Dec 2025 21:17:00 +0800</pubDate>
    </item>
    <item>
      <title>基于大模型的病毒木马文件云鉴定</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485757&amp;idx=1&amp;sn=6a9abd8c76b5537f73f64671ff48a7e7</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>huoji</span> <span>2025-12-22 10:00</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=343ed6cc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEZFfaYBgUqdLl5768fK84BCBiaaqh9cPTkSIfCvDtDx4xCWpgk9tGL4Q%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">不开玩笑的说,这玩意比实习生靠谱</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">事情的起因是一年前我说过做基于HLIL的语义驱动的杀毒引擎,现在年底了,也应该要拿出来了:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">《2024年终: 木马病毒自动化特征提取&amp;云端机器学习的思路分享》</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484551&amp;idx=1&amp;sn=4e0edcc586ec733f9d3a8b0ba93b9069&amp;scene=21#wechat_redirect" textvalue="2024年终: 木马病毒自动化特征提取&amp;云端机器学习的思路分享" data-itemshowtype="0" linktype="text" data-linktype="2">2024年终: 木马病毒自动化特征提取&amp;云端机器学习的思路分享</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果没LLM 我会选择用规则驱动去识别异常代码,但是LLM实在是太好用了，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">他比过去所有所谓的检出规则都好用</span></strong><span leaf="">，所以中途就修改了一下方案，就变成现在的效果了。</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">特点</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">他相比传统鉴定引擎，有如下优点:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">大部分情况下不可绕过 传统规则引擎，能被各种混淆/加密绕过,而这个引擎,就相当于人搁那分析代码,所以各种花里胡哨的绕过反而会被标记成恶意</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">越来越强,检出能力和效果会随着样本积累变强</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当然什么事情都有缺点,实践中他也有如下缺点:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">非常依赖反编译引擎,如果反编译引擎拉闸比如不支持RUST,也没办法很好的适配LLM,模型会失去效果 -这个得持续优化代码才行</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">大模型容易受到提示词影响比较大,是真的比较大,提示词工程可能需要一段时间的磨练和积累 -这个得通过不断人工干预，得到一个数据合集后，再做微调才行，否则没什么好的办法.</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">模型不是专用模型，导致数据积累知识经验不够,目前所有主流的模型都对逆向不太熟悉,幻觉率高,导致检出效果不稳定. -这个可以跟2一样用一样的方法解决</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">成本太高 -大模型是通用模型拿来干这种检出成本太高了，但是也可以通过2的方法，搞一个比较小的模型，应该是OK的</span></p></li></ol><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">技术架构</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">核心架构</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本质上,我们最终目的是 让大模型读代码 然后输出结果.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">第一步我们其实是需要一个靠谱的反编译引擎，本来我想直接做MCP的，但是实测下来,IDA/BN/NSA的那个反编译工具 均不能有效的输出想要的东西,更别说遇到ZIG OLLVM RUST golang就属于拉闸的那一步,因为他们没适配，而且速度慢。最重要的是代码不可控,比如BN在跑某些混淆会直接bug闪退,以及这些都要版权费,实在是太折腾了。所以2024年年底就开始折腾一个靠谱的/快速的反汇编引擎</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">具体可以看IDA的F5制作系列</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484622&amp;idx=1&amp;sn=6849577c509c4243bf45ddfd1c66fe37&amp;scene=21#wechat_redirect" textvalue="IDA背后的原理入门(一): 简介&amp;函数识别" data-itemshowtype="0" linktype="text" data-linktype="2">IDA背后的原理入门(一): 简介&amp;函数识别</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484631&amp;idx=1&amp;sn=ff22b2fe52ffcca4cacee55b256ba014&amp;scene=21#wechat_redirect" textvalue="IDA背后的原理入门(二): 函数大小计算" data-itemshowtype="0" linktype="text" data-linktype="2">IDA背后的原理入门(二): 函数大小计算</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484649&amp;idx=1&amp;sn=afeeed3ec2c8d832bb65c265f1551930&amp;scene=21#wechat_redirect" textvalue="IDA原理入门(三): 控制流追踪与CFG Blocks构建" data-itemshowtype="0" linktype="text" data-linktype="2">IDA原理入门(三): 控制流追踪与CFG Blocks构建</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485061&amp;idx=1&amp;sn=e6df183f46e05b6bad1b8d79df46d2ae&amp;scene=21#wechat_redirect" textvalue="IDA原理入门(四): 函数参数识别" data-itemshowtype="0" linktype="text" data-linktype="2">IDA原理入门(四): 函数参数识别</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485332&amp;idx=1&amp;sn=25ef87ab7af839c54e8e4727bfd045cb&amp;scene=21#wechat_redirect" textvalue="从0制作IDA的F5代码还原功能(hex-rays插件) 上" data-itemshowtype="0" linktype="text" data-linktype="2">从0制作IDA的F5代码还原功能(hex-rays插件) 上</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最终我实现了一个自定义的反汇编引擎,他效果比IDA差,但是给大模型读肯定是够用了,重要的是由于没有太多的编译器优化或者乱七八糟的组件,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">他的速度非常的快而且精准</span></strong><span leaf="">,大概速度是IDA的2-4倍</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002092" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=40b39f56&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEicl2pXldF7hsY5AhpVqbXsoSHhGTiaGfCXJZcGbicuZGzAv9QWyrJAbpA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002091" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=490afb78&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEBANpXx5AegCs2icrYQOZ3ibvlv5pvMhlceibTRiaY9cY2g32ibrUBOJSNhQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002094" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=bd1dd903&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEHviawdQ3AVfakFHoohGIWbr7bvj1uKY68QLBWQuYG7slw9WbpxmxDoA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">而且也专门做了对GO的支持,可能以后要做RUST的支持:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002093" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ad554784&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEibicu8DU5GZGE4QD8iaVA0a48hzNbbKlTNF5f7q8OGdva1vy6aqLO1pmw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">对GO的符号解析感兴趣吗?感兴趣的可以私聊我感兴趣,人多了(大于100个人),出一期专门说怎么处理GO的ABI/symbols的操作</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">反汇编引擎的技术架构上,走的是bn的路线,思路来自binnary ninja的blackhat演讲,简单来说,把汇编抽象成LLIL-&gt;MLIL-&gt;HLIL-&gt;CUSTOM IL（比如C/rust/go都行）</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这个路线不仅成熟，而且也够现代，IDA有历史局限原因，这个就很蛋疼。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">具体就不展开细说了，大部分时间我其实都在处理最后的HLIL的打印优化上（是的，从机器角度来说够用了，但是人要看得舒服就一定要做大量的打印优化，比如do while,for ,if else），相当于从头写了一个编译器优化pass，而retdec比较聪明，他们用LLVM做优化，但是LLVM也存在不可控，大，慢的问题，所以我最后决定还是自己做，反正是给AI看的。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">总而言之，花了一年的摸鱼时光，我们现在就有了一个 快速，轻量，可跨平台的反编译器，支持LINUX和MAC和windows和国产系统.而且代码只有大概十万行:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002090" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=77a35ba6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEibMoWfcickmic5xwNZ3vagxZqto7lFsSomwvbRPYgYOML1S52soohyw2w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">还是DeepSeek</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">有了核心基础后,我们要考虑用什么AI模型.最终我选择了DEEPSEEK,原因无他,他便宜。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">我们知道，工程应用和实验室不一样，工程应用一定要考虑成本，哪怕模型再好，成本太高肯定是不能接受的。DS的能力虽然在我看来做检出非常非常的中庸，但是他是最便宜的,在随随便便就没了几百万token的时代,便宜才是硬道理.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002096" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=be815ce0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEGz5Huib6XOmBEmiaXohpXYaBVTvcEAKVEa9bQ0mPs3r46OjpJ37ma3Ow%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">一千两百万Token只要四块钱,隔壁GPT哭晕在厕所.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002097" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=8125f378&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEucgaVKVib5IgakLtpLWupUG56ibYBYLEprQyXOwCNicgEQs5uSWq40ArA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002095" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=21073d45&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkME4an7dnvt0icThCDDvMeIUiax2wefUwFUVa9AzbKUKMH3Uy48PsIYk9Lg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当然这也不是吹DS好,只是因为DS够便宜,所以出问题算我的.</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">他实践过程中真的有不少问题</span></strong><span leaf="">,我感觉是我为了兼容他,做了大量修改,而别的模型总是一次过,这里就不细说了,都是提示词和优化流程的问题.</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结论</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后,我做了一个web节目和命令行,用于批量分析木马,做鉴定,并且给出结论:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002098" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=7fd88c51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEMlfZqQ9H6EUicdELfl6Tk3gicIh2EoyAZUgIqItWotX6U6fZckhUbEGA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">AI检测到病毒的时候:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002099" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=05841b89&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEGRNHbzK2PJUia5Nj6nBwYEYI6p2GrCTKRbxxSF8x1GBXUvp2UesGLhg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">检测到OLLVM代码混淆</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002102" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=24a8220b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMENGIsTNhpF0HVIQSrBkIfF0LQTuicDn6iaFE4kicJEs42I8E3Y9SsDpGcQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">检测到游戏修改器:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002101" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1d0e544f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEP3ts8ic1na3esU85bQnA6F1ZGo39xoK4NrTz4R1MXiaHRDboJzgnicomQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">mimikatz:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002100" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ddb4abe0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEjCSwPMJzErNDVpVaubPZHMyDHYLf9grbrAk7lPsxX6NoibSw4gyhC2w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">VT全绿银狐:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002104" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=58f9134c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEpay46YSoh1vldmibl2e49oR5Ypkpelwg60vxCyJKfvyvVCFCslickBWg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002103" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c941848f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEojONgrzZVjT1DOJzFAulibiaFqWw3TahQzRO0AByI7wCFcbAdFb6HLPw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">漏洞驱动:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002108" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b3f471d1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJ40amxSiawyXpL2zH6KSkMEuRBlb5TWAQT2ucNlSrLo5Qj5pVLjIVsvl9Fesvs60UXiaeJvajibIic8g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">不闭门造车</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本来我想打着不闭门造车的想法加上马上2025年了,把这个开源的.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">但是目前这个,完成度比较低,bug也贼多(尤其是反编译引擎),所以还是先等我把bug修的差不多了再说吧.不过目前整套引擎已经在外网部署了一套,感兴趣的朋友可以在底下投票,如果票数大于300则进一步搞一个先锋内测群.进一步探索大模型用在杀毒的能力.</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">少于300投票则算了不搞了</span></strong><span leaf="">,浪费时间.</span></p><p class="mp_vote_iframe_wrp" nodeleaf=""><mp-common-vote class="js_editor_vote_card js_uneditable custom_select_card mp_vote_iframe" data-pluginname="mpvote" data-supervoteid="459595130" data-expiretime="1767110428" data-votesubject="[{&#34;type&#34;:1,&#34;title&#34;:&#34;搞不搞这个项目的内测!&#34;,&#34;options&#34;:[{&#34;name&#34;:&#34;搞&#34;,&#34;url&#34;:&#34;&#34;,&#34;cnt&#34;:0},{&#34;name&#34;:&#34;不搞,什么电子垃圾&#34;,&#34;url&#34;:&#34;&#34;,&#34;cnt&#34;:0}],&#34;total_cnt&#34;:0}]" data-delflag="0" data-fail="0"></mp-common-vote></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=15fc821b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485757%26idx%3D1%26sn%3D6a9abd8c76b5537f73f64671ff48a7e7">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 22 Dec 2025 10:00:00 +0800</pubDate>
    </item>
    <item>
      <title>DeepSeek V3.2策略游戏测试 | 进步很大</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485737&amp;idx=1&amp;sn=68961c19d35699cf80801677ac9f3839</link>
      <description>众所周知昨天DS发布了V3.2.据说是极大的提高了智商,所以我准备拿上次的帝国时代2游戏竞技场来复测一次。</description>
      <content:encoded><![CDATA[<p>
原创 <span>huoji</span> <span>2025-12-02 23:42</span> <span style="display: inline-block;">北京</span>
</p>




<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=42255e47&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWLs8wh3NG5EskHDNicasOGCLWypSFRuJSwjmMMlRerMqURtOmWHBU5hLggTnPTjGc9baeWZSd4jR3w%2F0%3Fwx_fmt%3Djpeg"/></p>


<p><span leaf="">众所周知昨天DS发布了V3.2.据说是极大的提高了智商,所以我准备拿上次的帝国时代2游戏竞技场来复测一次。让AI通过MCP工具操作游戏, 玩策略游戏，最终打败对手:</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485632&amp;idx=1&amp;sn=5099048f6d21234acfacb5f13d2c7545&amp;scene=21#wechat_redirect" textvalue="中秋特辑:中外AI大战!让AI们通过MCP玩帝国时代2" data-itemshowtype="0" linktype="text" data-linktype="2">中秋特辑:中外AI大战!让AI们通过MCP玩帝国时代2</a></span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">这些策略游戏是一个可以很好的考验语言模型的工具。</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">从资源调度，信息搜集，巨量token是否崩坏，MCP能力，战略决策能力上，能看出一个模型的综合能力.</span></span></p><p><span leaf="">上次只有两个模型是出彩的，一个是国产GLM ，另外一个是国外Claude SN 4.5，而DEEPSEEK属于是中等偏下那一桌</span></p><p><span leaf="">上次测评,DS的主要痛点是:</span></p><p><span leaf="">逐渐崩坏,一开始领先慢慢的变落后最后被反超</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002044" data-ratio="1.037037037037037" data-s="300,640" type="block" data-type="png" data-w="945" src="https://wechat2rss.xlab.app/img-proxy/?k=bc0843ea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4tku5AN6uw7NA9A2YRuuRibawPFwsZ4njp3KIPBdJW5nZ8YmhMxHEVFw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">唯一一个主动投降的模型:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002045" data-ratio="0.163855421686747" data-s="300,640" type="block" data-type="png" data-w="830" src="https://wechat2rss.xlab.app/img-proxy/?k=d13d655a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4FZ0HTxA8QjXnJbnRnZXjuOGO2gXovfyHMXp8HiaI2XsDcbzibyJXmNBg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">还要其他的问题，比如空间感知问题(一个农田，非要叠到其他农田上去，导致建造失败-&gt;反复建造-&gt;建造失败....)</span></p><p><span leaf="">而今天晚上发布的v3.2，这些痛点都解决了,首先是thinking过程中调用工具,终于让think模型可以跑tools了而不用额外的&lt;call_tools&gt;</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002047" data-ratio="0.412962962962963" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=92ab6b0b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw40ibRR8ib5GLMha6Ls5paNOaCLBibjSfKd0SNgIlegWadxL2HQJlpicIssA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">不过这个东西缺点也很明显，在我的MCP里面，我也不知道为什么，他会无限在think状态调用工具....希望后续官方能出一个限制调用工具次数的东西，否则他的所有输出全部在think里面而不在正常的回复里面了.</span></p><p><span leaf="">但是这些都不是重点，这次新版本，实测几次下来，无论是空间感，资源调度能力，还是MCP调用能力，还是逐渐崩坏的问题 都已经解决了! <span textstyle="" style="font-weight: bold;">并且价格居然还是那么低,低到我不得不连夜发这一篇文章的地步.</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: normal;">空间感:</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">之前ds最显著的问题是,他一个建筑,非要放到另外一个建筑旁边,他对x y z的把握非常非常差差，导致他想新建建筑，但是这个建筑被其他建筑占位了，他又想调整，导致死循环，这一点在建造农田和伐木场的时候尤其明显。</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">而经过多次测试，这次版本中解决了这个问题,至少农田不卡壳了...</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002048" data-ratio="0.31203703703703706" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=d57630bd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4o6A1OKb1aCJJ89HUxgE6kaDfFJtRRvds13tYHiaficF7XgbcIUxYprXQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">伐木场的摆放顺序也非常正确</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002049" data-ratio="0.6802083333333333" data-s="300,640" type="block" data-type="png" data-w="960" src="https://wechat2rss.xlab.app/img-proxy/?k=1eec5e4a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4QQAMqUibPE9CuJUShZof7Qckyum5XaoGHLhv5Bo0OEQK62ygLakQPHA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">他的农田摆放居然懂得围绕磨坊来摆放,这以前版本是不可能的</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002050" data-ratio="0.6628630705394191" data-s="300,640" type="block" data-type="png" data-w="964" src="https://wechat2rss.xlab.app/img-proxy/?k=20310259&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4vPWX8Q2aAamw9ic9jTo3ic7vH01TPHXFAE2VibraibWBmuZiaIdR5cia0S5Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002051" data-ratio="0.3453703703703704" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1c22fdde&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4mYmCObVgKWmGDpzbLmjNuSXedIyrMEaq6wbvznicvLAmBMJysAKFKlw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">建造的时候已经学会正确的先观察有没有物体防止堆叠</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002052" data-ratio="0.27037037037037037" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2fa7d742&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4KrQC92JicbRRLZmIQgPe8ibQs4qv9fyvAkF1JbACr0knU0Gdykdx9u9w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-size: 20px;">资源调度能力</span></span></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-size: 17px;">之前的一大痛点就是,他的村民调度能力实在是不行,经常出现十来个村民搁那空闲不干事。这次资源调度表现比之前好很多，经过多轮测试，他现在已经有意识的让村民保持干活状态了:</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 17px;">闲置率基本能保持在1-5个左右:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002053" data-ratio="0.575925925925926" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=75f28fb1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4sKXEEZ3wR7MfoQ3IgkiaNQcRDdIOEHDMLNoYbd6a8Bq1qTAHxEIdQ6A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 17px;">会主动让村民干活</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 17px;">而升级时代的速度,和资源的分数上,也是首次出现超过AI的水平</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;">战略决策能力</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 16px;">GLM/Claude知道在封建时代派兵骚扰，城堡时代攻城武器攻击，并且建造箭塔进行防御,之前DS只会防御不会进攻,进攻也只是搞笑的几个骑士,也不会造攻城武器,而这次有了很大进步:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002056" data-ratio="0.3861111111111111" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=5c44b105&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4Sy54tVPKZb56AwMZky4RQkUb0fq5buf2lSMMFdNmIibZDn0tvbllfUw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">他的进攻计划,跟其他不同,他进攻之前一定要满科技:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002057" data-ratio="0.36574074074074076" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=264103d8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw40l6UpRC3Jfp1GzArQ1ySHUZB2ITTedAicCZNbzAhibu9LU1oJctR8ic7A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 16px;">然后准备攻城武器:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002058" data-ratio="0.3314814814814815" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2afb35e5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4clhviae2TJBcal5JmGJoO1ZxlzXzGvF7WAfVcOz9KpXerWRVmLnc9zA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">跟上次不同，他现在会袭扰农民战术:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002059" data-ratio="0.15925925925925927" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=0e84f80b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4M6pJicXN538lpd4gef9AnOTaoq9MIk0z9GlmLkchGOd4olU3bIPZT1Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">派出的部队:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002060" data-ratio="0.5740740740740741" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=4baf3937&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4qBUVnZEXQWTCTEVLhMg2WEGgMjLm5yRxwNIwZVTOQDHy5be6icpZrow%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">不过有点搞笑,派出的部队走得太慢打不到敌人，背后跟了一堆野生动物</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002062" data-ratio="0.372615039281706" data-s="300,640" type="block" data-type="png" data-w="891" src="https://wechat2rss.xlab.app/img-proxy/?k=bca61695&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4EICZmMPbciaDKgUxjibHSK9p1A5o8zLVqrRDQyIhWoLRibtZ6kUmH8ibbw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">然后这些部队被野生动物吃掉了</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002063" data-ratio="0.708649468892261" data-s="300,640" type="block" data-type="png" data-w="659" src="https://wechat2rss.xlab.app/img-proxy/?k=4c39c9be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4f0pk4I7FXMXG5cnyLwoSfnLTI5XLdOlDRASHECUYHkFHcYx2vG7VfQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 16px;">标记地点,造攻城武器:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002061" data-ratio="0.39814814814814814" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ea91f951&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4vjP76UlUyPlOwLhh4yPVgnEXGfR4dKia3iboJcFF81ErVian6qtlJQCMw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 16px;">总的来说,有进步,但是没GLM/Claude那么聪明,这两个会直城，并且派兵骚扰，建造攻城武器联合进攻，造弓箭手。而DS更倾向于两个兵种，长矛兵和骑士。。。不知道为什么</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002064" data-ratio="0.6433566433566433" data-s="300,640" type="block" data-type="png" data-w="715" src="https://wechat2rss.xlab.app/img-proxy/?k=7253b70d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw49R9D5Yxm6qpib9flkKVIg12giaPbJD6TLgHtMwYC4kJZAp0mPfSzhiaVg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 20px;">价格</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 15px;font-weight: bold;">价格真的是这个模型最大的优势，在一场接近2小时的帝国时代2的MCP高强度调用后，我居然实际只花费了27块</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100002065" data-ratio="0.7314814814814815" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1b68b192&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4xZ8ZxHscKC5kQIganUFEicQzwxiaia4ZxPgHYB6J1saQziaV5QySuN5MRA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">而同样的模型GLM花费200左右，<span textstyle="" style="font-weight: bold;">claude花费了1200人民币 ，还是用了1rmb=1美刀的中转站。要不然我就直接破产了。</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 15px;">所以别说好不好用，他价格就这样，这种价格，即便是代码写出bug了，也是我的问题</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;">总结</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 15px;">从最终效果来看，</span><span textstyle="" style="font-size: 15px;font-weight: bold;">进步非常之大，</span><span textstyle="" style="font-size: 15px;font-weight: normal;">相当于从完全不能用的人机，变成了能跟帝国时代2里面的简单电脑切磋的水平.....虽然策略类游戏跟GLM和CLAUDE还有一段距离.但是考虑到价格因素，让我们继续拭目以待.....(话说回来，也就GLM和CLAUDE能打策略类游戏，GPT5也打不了)</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 15px;font-weight: normal;">当前DSV3.2和AI的比分,两个相似,相当 于是简单人机吧:</span></span></p><p><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002054" data-ratio="0.62109375" data-s="300,640" type="block" data-type="png" data-w="512" src="https://wechat2rss.xlab.app/img-proxy/?k=97a8ea15&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw43m0LXerIPVBqZSQkmibg4Ip0XOGLg0xxf8LriaoTNCLEn7ibpibiadE53Jg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span leaf="">隔壁GLM的,碾压水平,起码相当于困难电脑:</span></p><p><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002055" data-ratio="0.642962962962963" data-s="300,640" type="block" data-type="png" data-w="675" src="https://wechat2rss.xlab.app/img-proxy/?k=6c0fc9d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWIXtnMFbcKgr3Xf3hTALUw4z1j92aosJMYxAXg53EZwCWqM7k9C0L67icAYJeuV23BqjQWvpan1Dbw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span leaf="">现在这么便宜的东西都已经效果这么好了，已经迫不及待的等下一个大版本了</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="2247485737">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0a202880&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485737%26idx%3D1%26sn%3D68961c19d35699cf80801677ac9f3839">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 02 Dec 2025 23:42:00 +0800</pubDate>
    </item>
    <item>
      <title>&#34;破碎注入&#34;无痕注入不使用任何进程句柄的注入技术原理分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485690&amp;idx=1&amp;sn=774ef1b6f5a1299414aa781c979d71f7</link>
      <description>破碎攻击(Shatter Attack)概念来源所谓 Shatter Attack 是一种早期（主要在 Win</description>
      <content:encoded><![CDATA[<p>
原创 <span>huoji</span> <span>2025-11-27 00:18</span> <span style="display: inline-block;">北京</span>
</p>




<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=083006ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXEeSUdsNhMW7CBSdmxuTnv3Sf1kjY7cqPcWUcdsSnibeLj9A90XBV2hA%2F0%3Fwx_fmt%3Djpeg"/></p>


<h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">破碎攻击(Shatter Attack)</span></h3><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">概念来源</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所谓 Shatter Attack 是一种早期（主要在 Windows NT、Windows 2000、Windows XP 时代被关注）的本地特权提升攻击方式。它利用的是 Windows 消息机制（Windows Messages）在同一桌面（desktop）环境下没有足够的安全隔离这一漏洞。</span></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Windows 消息机制的背景</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在 Windows 图形界面系统里，GUI 线程之间可以通过 SendMessage / PostMessage 等 API 发送消息。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这些消息（WM_XXX）会被目标窗口的回调过程（WindowProc 或过程函数）处理。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在设计上，所有同一交互会话中的应用程序都可以给彼此发送消息——包括输入消息、控制消息、甚至某些带有内存指针的结构（如 WM_TIMER、WM_COPYDATA、WM_SETTEXT）。如果目标进程是一个高权限进程（例如以管理员账户运行的 GUI 程序），而攻击者的低权限进程能向它发送精心构造的消息，就有可能诱使目标进程执行任意代码。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">攻击原理</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">攻击者写一个低权限程序，找到同一桌面上运行的高权限进程窗口句柄（比如系统配置工具、服务管理器 GUI）。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">利用 Windows 消息机制，向窗口过程发送带有指针的消息，让高权限进程执行某种动作（如调用回调函数、写入/读出内存）。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">因为消息处理代码是在目标进程的上下文中执行的，这会让攻击者的代码在高权限进程里运行，从而提升权限。</span></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">使用的漏洞点</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当时的核心问题：</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">高权限 GUI 程序与低权限 GUI 程序运行在同一个交互桌面 (interactive desktop) 上。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">Windows 消息机制在用户模式下允许跨进程发送，并且缺乏足够的权限检查。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">这种情况就被形象地称为 “Shatter”（打碎安全界限）攻击，因为它“打碎”了权限隔离的边界。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">影响与修复</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">微软在后续更新（尤其是 Windows XP SP2 以后）中，加强了对 SendMessage 等 API 的检查，限制不同安全级别进程之间的消息交互。</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">从 Windows Vista 开始，引入了 “用户界面特权隔离” (User Interface Privilege Isolation, UIPI) / 低完整性级别机制，阻止低权限程序向高权限程序发送某些危险消息。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">现代复兴</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个跟Storm-0978的利用路线一样,我们先说一下时间线:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484443&amp;idx=1&amp;sn=d75d5cb737745dd9d5106967bfd94f55&amp;scene=21#wechat_redirect" textvalue="深度研究APT组织Storm0978的高级注入技术StepBear" data-itemshowtype="0" linktype="text" data-linktype="2">深度研究APT组织Storm0978的高级注入技术StepBear</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2017年最开始被人拿去在CSGO上搞外挂，因为这是</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">一种不用进程句柄的远程进程读写技术</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002026" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0eceb2cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVX4CyxGhrt1jtXE3ibkyca1Z47ybCZmtKebJNicK2mfg4dThaOmddNHv0g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2022年又被提出来了一次</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002030" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=90b9b659&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXp6LYaxQ0v0WByOebROIYibG6r33GSsyAuUEkcPDZdUstHsdy5IjvkKg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">并且有人提到有恶意软件在使用</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002027" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4a6d86ed&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXrGbxQHN75v4ibQRPIvOdP7KJugVibBpJC9gXIibTian46Phcx3ia6caCMDg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">2023年的时候跟汪总稍微研究了一下,因为我发现有人利用,所以才接触到此类技术,稍微在key08提了一嘴:</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">[2023]阻止window hook exploit meme</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a href="https://key08.com/index.php/2023/12/30/1823.html" target="_blank">https://key08.com/index.php/2023/12/30/1823.html</a></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002029" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=bb61ccd2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVX0lHRqp8Kv98YyTjmyIl74iacFgibrDlWhhgcay0iaNibJmnsrHzknL5DKQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2024年就看到毛子APT在大规模滥用了</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">再然后,这种东西就跟VMP3源码一样，传来传去,到最后免费送了, 所以</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">到现在,被开源了</span></strong><span leaf="">,那也没什么好藏着掖着的了,直接来介绍这块吧.</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这项技术的优点的:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">不用任何句柄</span></strong><p><span leaf="">,这意味着,大部分常见的EDR/EPP检测注入手段全部失效.</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">很难进行行为检测,恶意软件利用基本能实现断链.</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">缺点:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">开了CFG拉闸</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">很多窗口默认都开了CFG, 所以一般游戏用得多.但是对于安全领域,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">总有些窗口是没CFG的</span></strong></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">没开CFG的窗口</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002028" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3a5a63c0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXmOU7ozlUME5JhxibR4KSJJ3m2ibCH3iaFlWiba7m9tls4InNSTbzTjd1jg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">开了的:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002035" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=316f789f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXY31Ugk1DnW31uyciaIriaicyaqjXjVW8CmEcM5a77w4JdgFfwVe0QqicGQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">核心原理介绍</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">让AI复习一下setwindowshook的工作原理</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002034" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=2ab5d385&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXznZtRBznsbApGjdg8y07OeoUwto0gf4NF07sfQkoCPCgou0ohts5jw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">发现盲点了吗~ 通过setwindowshook我们可以实现</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">让具有窗口的程序执行任意代码</span></strong></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">任意代码执行</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SetWindowsHookEx负责设置要执行的位置,而我们还需要执行的代码，而SendMessage是非常好的执行的API,但是我们依然要找个gate,来把 </span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">msg-&gt;wparam</span></code><span leaf="">、</span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">msg-&gt;lparam</span></code><span leaf=""> 和 </span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">msg-&gt;id</span></code><span leaf=""> 反序列化到三个不同的寄存器，然后通过 JMP [RAX] 调用 </span><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;color: rgb(232, 62, 140);word-break: break-word;"><span leaf="">msg-&gt;lparam</span></code><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">所以作者准备了两个gate,作为布局,分别是RtlpFcChangeRegistrationCallback和_PsxaCallOwner</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">而毛子的APT组织用的是I_RpcFreePipeBuffer</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整个流程如下</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf=""> SendMessageA(hwnd, WM_APPCOMMAND, wparam, lparam)</span><br/><span leaf="">      ↓</span><br/><span leaf="">  SetWindowsHookEx的 WH_SHELL Hook 被触发，执行 w (write gadget)</span><br/><span leaf="">      ↓</span><br/><span leaf="">  w 读取 wparam 结构体中的 function_ptr (即 t)</span><br/><span leaf="">      ↓</span><br/><span leaf="">  t (trampoline) 解析参数，调用 memcpy 字段指向的实际函数</span><br/><span leaf="">      ↓</span><br/><span leaf="">  实际目标函数执行 (RtlCopyString, malloc, 或任意函数)</span></code></pre><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一个gate</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个代码里面，作者第一个gate是</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">RtlpFcChangeRegistrationCallback</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">一旦发送消息后,目标进程就会执行</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">gate_one(nCode, wParam, lParam)</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">而这个地方长这样:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002031" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=a9e69160&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXN2fZRrFyoFGJqhDnQ1hbzRk6SAeeYXgrxNcttxujwTmPibs1lUa6ibibA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">改个名字：</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002032" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=62abe4f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXXyz8qOlop08nCHJQCRibkbCiaJgzvtLz6FNm3warwr8GMoicu0k2T2ibBg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">__int64 __fastcall RtlpFcChangeRegistrationCallback(__int64 a1, __int64 a2)</span><br/><span leaf="">{</span><br/><span leaf="">  RtlAcquireSRWLockExclusive(a2 + 0x20);</span><br/><span leaf="">  (*(void (__fastcall **)(_QWORD))(a2 + 0x10))(*(_QWORD *)(a2 + 0x18));</span><br/><span leaf="">  return RtlReleaseSRWLockExclusive(a2 + 32);</span><br/><span leaf="">}</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">他会执行wParam+0x10的代码,并且把0x18当作参数1传入到里面,也就是开始执行第二个gate</span></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二个gate</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二个gate在shell32里面,叫做_PsxaCallOwner,参数1成了前一个gate写的wpawn + 0x18了</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">而参数2,rdx成了之前的wpawn的0+0x8了:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002033" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c9a277d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXSoyJ42gS57vcH3g09saB0dMeGVLAyRl5Fj2ZNHNxdSM76V291gbzXg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">然后就会call rax,这个rax本来应该是0的,但是前一个RtlpFcChangeRegistrationCallback会设置rax=rbx+0x10 也就是wpawn + 0x10 所以这玩意就成最终的call函数地址了:</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002036" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=6bd047ab&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXUuyMQMPWp7FTyfic0rIEef5EZaG0nWric2LFaJSlW45SuBBBPtgMX00A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">从而实现了任意进程函数调用,任意进程读写.而不用任何windows的API.一次能读写8字节数据..</span></p><h4 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.5rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总结</span></h4><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">让AI画了个图</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002038" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=46e69575&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXPlwBoibMJluYqibEavv5BsoTiblehDJv3hLmlY1hbnOOLNqdX7vAoySTg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">检测</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">他不是完全不能检测,如果EDR采集了窗口数据源,或者像xxx一样有核晶或者infinityhook的话,就非常容易检测了,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">所幸,win32k数据源，hypervisor，infinityhook这三个已经成为大部分安全软件的基础设施组件了</span></strong><span leaf="">.所以检测起来不难.就拿EDR来说,他的检测结果跟之前的APT的检测结果完全一样,就是因为EDR采集了win32k数据源</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100002037" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e2d3e90a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKfJS6hDmDibrqnegDIKSibVXbQmmUIpbmAKAxEic9iaah4Or5WrNubC0gRlicgibEGiaGxI56pic04l8PTbw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">源码</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">本人不是作者,不对它具有任何法律责任</span></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf=""><a href="https://github.com/waryas/WaryasSWHE" target="_blank">https://github.com/waryas/WaryasSWHE</a></span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">再次强调,本公众号不做任何红队内容.这次也只是别人的开源技术分析.</span></p></blockquote><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">后续</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">现在回过头看毛子的APT的破碎注入过程,他们选择的应该是能避免CFG违规触发的调用路线,而这份代码,如果开了CFG,就举步维艰了.可能这就是APT跟民用的差距?</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="2247485690">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4e82f699&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485690%26idx%3D1%26sn%3D774ef1b6f5a1299414aa781c979d71f7">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 27 Nov 2025 00:18:00 +0800</pubDate>
    </item>
    <item>
      <title>安全开发(终章): 主动防御架构设计/查杀引擎设计/下一代查杀引擎展望</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485673&amp;idx=1&amp;sn=e36d59a9e8830c80fac9575eefba4d6e</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>huoji</span> <span>2025-11-17 10:00</span> <span style="display: inline-block;">北京</span>
</p>




<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=bb22c38d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWJOJ4psGfSlTQibao0ptfOwEFZicDj8GkDn0aZo0q9shAbFdgA6TOrOeApic0mPBD0K8Q9BSTJIias29g%2F0%3Fwx_fmt%3Djpeg"/></p>


<h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">终于,我们迎来了整个系列的完结,在此之前请阅读之前所有内容,因为本章包含了大量信息,不可以逃课.</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485177&amp;idx=1&amp;sn=ca5597408cb94e093d1ed07be9821337&amp;scene=21#wechat_redirect" textvalue="安全开发: 实现拦截病毒并且弹窗" data-itemshowtype="0" linktype="text" data-linktype="2">安全开发: 实现拦截病毒并且弹窗</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484988&amp;idx=1&amp;sn=654633f7088fe275a61f7c1ee7e628ca&amp;scene=21#wechat_redirect" textvalue="[预约订阅]高级安全研究之路:拒绝内耗,通过阅读提高自己" data-itemshowtype="0" linktype="text" data-linktype="2">[预约订阅]高级安全研究之路:拒绝内耗,通过阅读提高自己</a></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">在上一篇中,核心EPP的功能,内核通讯&lt;-&gt;查杀&lt;-&gt;UI 我们已经搞定了(虽然很多问题)</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">因此，其他的“功能” 比如主动防御/乱七八糟的杀毒/也只是基于这个核心功能的对外扩展.</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><em style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><span leaf="">因此我决定不再这些乱七八糟的功能具体细节代码上浪费时间,只说一下咋实现.</span></em></strong><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">本节主要内容:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">目前要解决的问题</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">主动防御设计</span></p></li><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0px;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">本地规则系统设计</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">云主防设计</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">主动防御缺陷</span></p></li></ol><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">查杀引擎设计</span></p></li><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0px;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">特征杀毒设计</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">启发查杀设计</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">AI查杀设计</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">云杀毒引擎设计</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">目前主流查杀引擎缺陷</span></p></li></ol><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">更好的查杀引擎展望</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">题外话: 为什么我们需要用EDR?</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">结语</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">其实本来还想写更多的,但是考虑到读者消化能力有限,还是别写太多了.</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span leaf="">要解决的问题</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">这里列举一下目前整套系统存在的问题,以及咋解决,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">但是不给出具体解决代码了,毕竟DEMO和商业化,路差的很远.</span></strong></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">IOCP通讯 -&gt; 我们的通讯机制还是队列通讯,这是异步的而且容易卡系统.为了实现主动防御，软件管控等功能，需要做IOCP的通讯，具体自己问GPT咋实现吧</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">UI/查杀分离 我们现在的R3模块是UI+查杀+高权限一起的,这不是设计失误,这只是为了简化,严格来说，查杀服务，和驱动通讯的服务，应该是单独的一个exe并且以service启动,而UI只低权限用RPC/PIPE/ALPC/GRPC等手段跟那个exe通讯.而不是在一起。在一起会有几个问题,比如UI不启动功能不生效,比如不要UAC功能就不生效,不开UI就没主动防御等问题.</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">UI架构,CEF过于臃肿,可能的替代方案是:QT,不过这玩意bug也多,WEBVIEW,这个不支持老版本的windows,新版本倒挺不错的.DUI这个最完美,360等一众杀毒软件都是这个做的.不过这玩意坑也多,而且对技术要求高.所以看情况来</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">驱动鉴权,内部签名. 如你所见,我们现在的驱动通讯是没签名验证的,所以会导致什么人都可以调用我们的驱动,从而成为漏洞驱动,所以,驱动要校验一下R3的内部签名,具体方法就不说了,自己问一下GPT,不过值得注意的是,</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">校验是不是内部签名也不安全,因为有DLL注入/白加黑劫持的风险,所以还需要校验进程内存完整性或者改用PPL保护方案</span></strong><span leaf="">.否则就会被劫持.</span></p></li></ol><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span leaf="">主动防御设计</span></h2><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: unset;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">注意: 设计主动防御之前,必须要先把通讯队列做成IOCP的那种优化,否则做出来的效果会不理想</span></p></blockquote><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">主动防御的设计,其实很简单,比你想的简单太多了,回顾上一章节,我们进程创建的时候就判断了MD5是不是黑的,如果是黑的就弹窗.而主动防御,就是把一堆信息,同样的方法塞到R3,然后R3写规则系统去判断.</span><br style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"/><span leaf="">当然不止进程创建,还能塞模块加载(loadimage),文件操作(minifilter),网络操作(WFP,不过注意这个只能异步,因为WFP的回调都是DPC级别的)等等的内核事件发给R3,玩的野一点的,hypervisor或者inifityhook的事件也可以发给R3.总之一句话,内核把事件发给R3.</span></p><p class="js_pay_preview_filter"><mp-pay-preview-filter data-offset="32"></mp-pay-preview-filter></p>


<p><a href="2247485673">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=96012757&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485673%26idx%3D1%26sn%3De36d59a9e8830c80fac9575eefba4d6e">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 17 Nov 2025 10:00:00 +0800</pubDate>
    </item>
    <item>
      <title>VMP3源码学习——虚拟化</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485663&amp;idx=1&amp;sn=508c4ad1f5163381c0727a6bccd48cc1</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>CrazyHarb</span> <span>2025-11-16 10:02</span> <span style="display: inline-block;">北京</span>
</p>




<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=551a72cf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWKXFvzK5FU6EGBl0Fn5XcgOvEMpkFWrhLhAqu0iaFPLQUBZ1FWvEzzRHfCZVIaYDk52fRaCPUNg9VA%2F0%3Fwx_fmt%3Djpeg"/></p>


<p style="margin-top:24.0pt;margin-bottom:24.0pt;margin-left:0.0pt;line-height:120%;"><span style="font-size:26.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VMP3源码学习——虚拟化</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_0;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">背景：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">前文中我们已经分析了源码中的变异核心指令，我们书接上文，本文中我们来看一下VMP中的虚拟化相关功能的代码，vmp的运行流程可以参考鸭哥的(VMP3.x内部原理详解与还原思路)，链接我放在本文最后的参考中了，说实话，我不是这方面专家，所以本文中涉及的逻辑仅限于windows x64下的PE文件的高级版本VMP</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><o:p><span leaf=""> 前文摘要</span></o:p></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><o:p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485288&amp;idx=1&amp;sn=74c85fd0a3c61b7eb98415cb7128c40d&amp;scene=21#wechat_redirect" textvalue="VMP源码学习(1) 变异分析与代码bug" data-itemshowtype="0" linktype="text" data-linktype="2">VMP源码学习(1) 变异分析与代码bug</a></span></o:p></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_1;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">入口点：</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf=""> // intel 虚拟化入口                  </span><span leaf=""><br/></span><span leaf="">   void IntelFunction::CompileToVM(const CompileContext &amp;ctx);</span></span></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_2;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">HANDLERS分析：</span></span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_3;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">1. </span></span></span><span style="mso-bookmark:heading_3;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">entry_command_</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这个就是鸭哥文章中提到的vmentry，该代码的最终效果可参考文章中的内容，它在源码中初始化流程为：</span></span></p><p style="mso-list:l0 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">初始化不使用寄存器列表，x64下是R12 ~ R15</span></span></p><p style="mso-list:l1 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">在rbx、rbp、rsi、rdi、R8~R11这几个寄存器之间，不放回取四个寄存器，分别表示</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">密钥寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">、</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪指令寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">(VIP)、</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪栈寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">(VSP)、</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">跳转寄存器</span></span></p><p style="mso-list:l2 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">初始化入口加密器，其实就是随机几条指令add sub xor inc dec bswap rol ror not neg这几个指令进行随机，</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">指令条数大于100</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，或者</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">大于3且随机数的最低位为1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">（我称它为随机数命中），则生成结束。同等道理，如果vmp选项中选中了加密字节码，也会随机一个</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">指令加密器</span></span><o:page></o:page></p><p style="mso-list:l3 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">开始填入代码，把rax、rcx、rdx、rbx、rbp、rsi、rdi、R8~R15、rflag</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">随机交换顺序</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">后，全部入栈</span></span></p><p style="mso-list:l4 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">随机一个空闲寄存器存储</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">当前段地址</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，并把该寄存器入栈</span></span></p><p style="mso-list:l5 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">将rsp + 0x90的值赋给</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪指令寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，0x90代表前面压入栈的16个寄存器+1个随机的空闲寄存器+call的返回地址，共18*8 = 0x12*8 = 0x90，取到的是vm入口入栈的参数</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:22.65pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img style="width:548.010009765625px;height:71.0px;" class="rich_pages wxw-img" data-ratio="0.12864493996569468" data-w="1166" src="https://wechat2rss.xlab.app/img-proxy/?k=f388daac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKXFvzK5FU6EGBl0Fn5XcgOZT6mnV2mIP3RnpVnpyZdNVe8ZqHr4v29ibpXBRdK4fZGibKiceMXLQ3VQ%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="mso-list:l6 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">通过入口加密器解密</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪指令寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，解密后加上前面的当前的段地址，当然这些运算都是低32位的，如果镜像地址高出32位地址，就把高位地址加上</span></span></p><p style="mso-list:l7 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">把rsp栈指针赋值给</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪栈寄存器，</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">并执行 rsp -= 0x180后，将RSP进行对齐操作，即</span></span></p><table style="margin-left: 22.65pt;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="522" width="522" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">RSP &amp;= 0xFFFFFFFFFFFFFFF0</span></span></p></td></tr></tbody></table><table style="margin-left: 22.65pt;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="522" width="522" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span><span leaf=""><br/></span><span leaf="">示例代码                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">push</span><span leaf="">rdi                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r9                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rbx                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r11                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rcx                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rax                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r12                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r8                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rsi                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rbp                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r14                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rdx                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r15                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r13                  </span><span leaf=""><br/></span><span leaf="">; 以上是全部入栈                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rbp, 7FF50F570000h                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rbp</span><span leaf="">; 存储当前段的地址                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rbx, [rsp+90h]</span><span leaf="">; 取到call处的参数， 17 个push</span><span leaf="">一个返回地址</span><span leaf="">18 * 8 = 0x90                  </span><span leaf=""><br/></span><span leaf="">; 解密算法开始                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">ebx                  </span><span leaf=""><br/></span><span leaf="">rol</span><span leaf="">ebx, 2                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">ebx                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">ebx, 1DBA2712h                  </span><span leaf=""><br/></span><span leaf="">; 解密算法结束                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">rbx, rbp</span><span leaf="">; 加上段地址算出来地址                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rax, 100000000h</span><span leaf="">; x64 位高位有1，加上                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">rbx, rax</span><span leaf="">; rbx 你就是伪指令寄存器了                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rsi, rsp</span><span leaf="">; rsi 你就是伪栈指针寄存器了                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rsp, 180h                  </span><span leaf=""><br/></span><span leaf="">and</span><span leaf="">rsp, 0FFFFFFFFFFFFFFF0h</span><span leaf="">; rsp 分配栈空间</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_4;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">2. </span></span></span><span style="mso-bookmark:heading_4;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">init_command_</span></span></span></p><p style="mso-list:l8 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">初始化</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">密钥寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，即把</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪指令寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">的值减掉</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">当前的段的地址</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">得到的值赋值给</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">密钥寄存器</span></span></p><p style="mso-list:l9 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">把当前的RIP赋值给</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">跳转寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，开始添加EndHandler指令，并跳转到下一个Handler，等...等一下，这个EndHandler是啥？</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_5;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">3. </span></span></span><span style="mso-bookmark:heading_5;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">ReadCommand</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">要了解EndHandler，我们首先来了解一下VMP读取指令的动作，它主要动作是滚动</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">密钥寄存器，</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">读取下一条指令码</span></span></p><p style="mso-list:l10 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">首先会从伪指令寄存器中读取4字节的下一个指令，但这个读取动作会分为两种，分为倒序和正序，这个是随机的，如果是倒序，则先给伪寄存器指令减4，再读取4字节内容；如果是正序，则先读取4字节，再给伪寄存器加4</span></span><o:page></o:page></p><p style="mso-list:l11 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">读取出来的指令值，先与</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">密钥寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">进行异或，再根据</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">指令加密器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">（注意不是寄存器）对数据进行解密</span></span></p><p style="mso-list:l12 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">最后</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">密钥寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">会与结果进行异或，达到</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">滚动密钥寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">的目的</span></span></p><p style="mso-list:l13 level1 lfo1;margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:22.65pt;text-indent:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf="">1</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">返回解密出来的结果</span></span></p><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_6;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">4. </span></span></span><span style="mso-bookmark:heading_6;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">EndHandler</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">好了，我们已经了解了读取指令的动作，那么HandlerEnd这部分逻辑就简单了，这部分在每一个Handler中都会出现，它主要动作是调用读取指令进行读取，然后将值加到</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">跳转寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，并跳转过去</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">这里面有一个特殊的点，如果参数指定了目标指令地址，那就会跳到目标指令地址中，但是还是会执行一次</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">读取指令</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">的动作</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov</span><span leaf="">r10, rbx</span><span leaf="">; r10 你就是密钥寄存器了                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rdx, 7FF50F570000h                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">r10, rdx</span><span leaf="">; 减掉段地址                  </span><span leaf=""><br/></span><span leaf="">lea</span><span leaf="">r11, [<a class="wx_topic_link" topic-id="mi0jtftk-kl0a2t" style="color: #576B95 !important;" data-topic="1">#5</a>]</span><span leaf="">; 获取当前rip地址到r11，你就是跳转寄存器了                  </span><span leaf=""><br/></span><span leaf="">;EndHandler                  </span><span leaf=""><br/></span><span leaf="">; 下面的指令就是ReadCommand，看来是倒序                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">eax, [rbx]</span><span leaf="">; 挪动指针，然后读取4字节                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">eax, r10d ; 先和r10密钥寄存器进行异或                  </span><span leaf=""><br/></span><span leaf="">; 下面是解密算法                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">eax                  </span><span leaf=""><br/></span><span leaf="">rol</span><span leaf="">eax, 17h                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">eax, 3F47718Ah                  </span><span leaf=""><br/></span><span leaf="">neg</span><span leaf="">eax                  </span><span leaf=""><br/></span><span leaf="">rol</span><span leaf="">eax, 1Eh                  </span><span leaf=""><br/></span><span leaf="">; 回填r10，滚动更新r10密钥寄存器                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">[rsp], eax                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">; ReadCommand 结束                  </span><span leaf=""><br/></span><span leaf="">movsxd</span><span leaf="">rax, eax                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r11, rax</span><span leaf="">;加到r11 跳转寄存器上                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">r11</span><span leaf="">; 跳！</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_7;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">5. </span></span></span><span style="mso-bookmark:heading_7;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">check_stack</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">别误会，这个Handler并不是对栈做了多么严谨的判断，仅仅判断了一下伪寄存器空间用了是否超过了0x40大小，如果超过了，就把rsp移动到当前栈指针上面0x180的位置，并把原始位置的0x100字节拷贝过去（在golang里面是乘以2，估计这么设计是有什么说法）</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">lea</span><span leaf="">rcx, [rsp+140h]                  </span><span leaf=""><br/></span><span leaf="">; 由于栈分配了至少0x180的大小，判断伪栈寄存器用的空间是否少于0x40，少于的话，直接进行执行下一条指令                  </span><span leaf=""><br/></span><span leaf="">cmp</span><span leaf="">rsi, rcx                  </span><span leaf=""><br/></span><span leaf="">ja</span><span leaf="">@F                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rax, rsp</span><span leaf="">; 这个位置证明栈空间不够了，那就把rsp移动到伪寄存器 - 0x180的位置                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rcx, 100h                  </span><span leaf=""><br/></span><span leaf="">lea</span><span leaf="">r8, [rsi-80h]                  </span><span leaf=""><br/></span><span leaf="">and</span><span leaf="">r8, 0FFFFFFFFFFFFFFF0h                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">r8, rcx                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rsp, r8                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rsi                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rsi, rax</span><span leaf="">; 把之前的rsp拷贝0x100个字节到新的rsp位置                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rdi, r8                  </span><span leaf=""><br/></span><span leaf="">cld                  </span><span leaf=""><br/></span><span leaf="">rep movsb                  </span><span leaf=""><br/></span><span leaf="">popfq                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">rsi                  </span><span leaf=""><br/></span><span leaf="">@@:                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">r11</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_8;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">6. </span></span></span><span style="mso-bookmark:heading_8;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">push register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">; ReadCommand Handler                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 1                  </span><span leaf=""><br/></span><span leaf="">movzx</span><span leaf="">r8d, byte ptr [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">r8b, r10b                  </span><span leaf=""><br/></span><span leaf="">ror</span><span leaf="">r8b, 2                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">r8b                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">r8b                  </span><span leaf=""><br/></span><span leaf="">inc</span><span leaf="">r8b                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">r10b, r8b                  </span><span leaf=""><br/></span><span leaf="">// 获取对应寄存器/局部变量的值                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">r9, [rsp+r8]                  </span><span leaf=""><br/></span><span leaf="">// 移动伪寄存器栈的指针，将值写入，完成压入动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rsi, 8                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rsi], r9                  </span><span leaf=""><br/></span><span leaf="">// EndHandler 动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">edx, [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">edx, r10d                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">edx                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">edx                  </span><span leaf=""><br/></span><span leaf="">bswap</span><span leaf="">edx                  </span><span leaf=""><br/></span><span leaf="">ror</span><span leaf="">edx, 5                  </span><span leaf=""><br/></span><span leaf="">inc</span><span leaf="">edx                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">[rsp], edx                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">movsxd</span><span leaf="">rdx, edx                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r11, rdx                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">check_stack</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_9;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">7. </span></span></span><span style="mso-bookmark:heading_9;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">pop Register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">// 读取伪栈寄存器的值，并移动伪栈寄存器指针                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rdi, [rsi]                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">rsi, 8                  </span><span leaf=""><br/></span><span leaf="">// ReadCommand 动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 1                  </span><span leaf=""><br/></span><span leaf="">movzx</span><span leaf="">ecx, byte ptr [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">cl, r10b                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">cl, 32h ; &#39;2&#39;                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">cl                  </span><span leaf=""><br/></span><span leaf="">neg</span><span leaf="">cl                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">cl                  </span><span leaf=""><br/></span><span leaf="">neg</span><span leaf="">cl                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">r10b, cl                  </span><span leaf=""><br/></span><span leaf="">// 写入对应的寄存器/变量中                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rsp+rcx], rdi                  </span><span leaf=""><br/></span><span leaf="">// EndHandler动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">ecx, [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">ecx, r10d                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">ecx, 7ACA04FBh                  </span><span leaf=""><br/></span><span leaf="">bswap</span><span leaf="">ecx                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">ecx, 2B355FD5h                  </span><span leaf=""><br/></span><span leaf="">rol</span><span leaf="">ecx, 10h                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">ecx                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">[rsp], ecx                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">movsxd</span><span leaf="">rcx, ecx                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r11, rcx                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">r11</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_10;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">8. </span></span></span><span style="mso-bookmark:heading_10;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">push value</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">; ReadCommand 动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 8                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rcx, [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">rcx, r10                  </span><span leaf=""><br/></span><span leaf="">inc</span><span leaf="">rcx                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">rcx, 0CCC15C6h                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">rcx                  </span><span leaf=""><br/></span><span leaf="">inc</span><span leaf="">rcx                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">rcx, 456C3348h                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">r10, rcx                  </span><span leaf=""><br/></span><span leaf="">// 移动伪栈指针，将值写入，完成压入动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rsi, 8                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rsi], rcx                  </span><span leaf=""><br/></span><span leaf="">// EndHandler动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">r8d, [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">r8d, r10d                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">r8d                  </span><span leaf=""><br/></span><span leaf="">inc</span><span leaf="">r8d                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">r8d                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r8d, 4FEA55AAh                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">[rsp], r8d                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">movsxd</span><span leaf="">r8, r8d                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r11, r8                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">checkStackHandler</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_11;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">9. </span></span></span><span style="mso-bookmark:heading_11;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">add</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">; 取出伪栈寄存器上面的两个参数                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rcx, [rsi]                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">r9, [rsi+8]                  </span><span leaf=""><br/></span><span leaf="">// 相加                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">rcx, r9                  </span><span leaf=""><br/></span><span leaf="">// 结果返回结构体                   </span><span leaf=""><br/></span><span leaf="">// {                  </span><span leaf=""><br/></span><span leaf="">//</span><span leaf="">uint64 rflags;                  </span><span leaf=""><br/></span><span leaf="">//</span><span leaf="">uint64 result;                  </span><span leaf=""><br/></span><span leaf="">// }                  </span><span leaf=""><br/></span><span leaf="">// 由于输入参数和返回大小一样，所以不会对伪栈寄存器进行任何移动                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rsi+8], rcx                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">qword ptr [rsi]                  </span><span leaf=""><br/></span><span leaf="">// EndHandler 动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbx, 4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">ebp, [rbx]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">ebp, r10d                  </span><span leaf=""><br/></span><span leaf="">bswap</span><span leaf="">ebp                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">ebp, 42EC7D95h                  </span><span leaf=""><br/></span><span leaf="">rol</span><span leaf="">ebp, 12h                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">ebp                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">[rsp], ebp                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r10                  </span><span leaf=""><br/></span><span leaf="">movsxd</span><span leaf="">rbp, ebp                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r11, rbp                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">r11</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_12;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">10. </span></span></span><span style="mso-bookmark:heading_12;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">call</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">; 这里由于是再次entry_command_过了，所以，伪寄存器已经重新随机了                  </span><span leaf=""><br/></span><span leaf="">; pcode_register(VIP) ---&gt;</span><span leaf="">rbp                  </span><span leaf=""><br/></span><span leaf="">; jmp_register 跳转寄存器</span><span leaf="">----&gt; r11                  </span><span leaf=""><br/></span><span leaf="">; crypt_register_ 加密寄存器</span><span leaf="">----&gt; r9                  </span><span leaf=""><br/></span><span leaf="">; stack_register(VSP) 伪堆栈寄存器 ----&gt; ebx                  </span><span leaf=""><br/></span><span leaf="">; ReadCommand 动作                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbp, 1                  </span><span leaf=""><br/></span><span leaf="">movzx</span><span leaf="">edi, byte ptr [rbp+0]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">dil, r9b                  </span><span leaf=""><br/></span><span leaf="">rol</span><span leaf="">dil, 1                  </span><span leaf=""><br/></span><span leaf="">dec</span><span leaf="">dil                  </span><span leaf=""><br/></span><span leaf="">ror</span><span leaf="">dil, 4                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">dil                  </span><span leaf=""><br/></span><span leaf="">ror</span><span leaf="">dil, 5                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">r9b, dil                  </span><span leaf=""><br/></span><span leaf="">; 伪寄存器入栈，堆栈寄存器赋值给rbp                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">rbp                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r11                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r9                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rbp, rbx                  </span><span leaf=""><br/></span><span leaf="">; edi 解密出来是参数的个数                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">ebx, edi                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">edx, ebx                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">ecx, ecx                  </span><span leaf=""><br/></span><span leaf="">; 参数个数小于等于4，则直接跳转                  </span><span leaf=""><br/></span><span leaf="">cmp</span><span leaf="">ebx, 4                  </span><span leaf=""><br/></span><span leaf="">jbe</span><span leaf="">lower_or_equal_4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">edx, 4                  </span><span leaf=""><br/></span><span leaf="">lea</span><span leaf="">ecx, [rbx-4]</span><span leaf="">; 存储入栈的参数                  </span><span leaf=""><br/></span><span leaf="">;我们的是x64，所以</span><span leaf="">rdx rcx r8 r9 剩下的入栈                  </span><span leaf=""><br/></span><span leaf="">lower_or_equal_4:                  </span><span leaf=""><br/></span><span leaf="">shl</span><span leaf="">ecx, 3</span><span leaf="">; *8</span><span leaf="">入栈的总大小                  </span><span leaf=""><br/></span><span leaf="">shl</span><span leaf="">edx, 3</span><span leaf="">; *8</span><span leaf="">计算参数总大小                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rax, rbp                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">rax, rdx</span><span leaf="">; 伪堆栈指针跳过总参数大小                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rbp-8], rax</span><span leaf="">; 保存原始伪堆栈指针                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rbp-10h], rsp ; 保存原始rsp                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rsp, rcx</span><span leaf="">; 分配入栈参数                  </span><span leaf=""><br/></span><span leaf="">// 对齐rsp                  </span><span leaf=""><br/></span><span leaf="">and</span><span leaf="">rsp, 0FFFFFFFFFFFFFFF0h                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">rsp, rcx</span><span leaf="">; 堆栈加回去                  </span><span leaf=""><br/></span><span leaf="">test</span><span leaf="">ebx, ebx                  </span><span leaf=""><br/></span><span leaf="">jz</span><span leaf="">core_call</span><span leaf="">; 0 个参数直接调用call                  </span><span leaf=""><br/></span><span leaf="">loop_arg_deal:                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rax, [rbp+rbx*8+0]</span><span leaf="">; 取一个参数                  </span><span leaf=""><br/></span><span leaf="">cmp</span><span leaf="">ebx, 1                   </span><span leaf=""><br/></span><span leaf="">jnz</span><span leaf="">judge_2</span><span leaf="">; 不是1个参数就跳转                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rcx, rax</span><span leaf="">; 如果只有一个参数就放在rcx中                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">dec_arg_count                  </span><span leaf=""><br/></span><span leaf="">judge_2:                  </span><span leaf=""><br/></span><span leaf="">cmp</span><span leaf="">ebx, 2                  </span><span leaf=""><br/></span><span leaf="">jnz</span><span leaf="">judge_3 ; 如果不是2个参数，就跳转                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rdx, rax</span><span leaf="">; 第二个参数放入rdx中                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">dec_arg_count                  </span><span leaf=""><br/></span><span leaf="">judge_3:                  </span><span leaf=""><br/></span><span leaf="">cmp</span><span leaf="">ebx, 3                  </span><span leaf=""><br/></span><span leaf="">jnz</span><span leaf="">judge_4 ;如果不是3个参数，就跳转                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">r8, rax</span><span leaf="">; 第三个参数放入r8中                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">dec_arg_count                  </span><span leaf=""><br/></span><span leaf="">judge_4:                  </span><span leaf=""><br/></span><span leaf="">cmp</span><span leaf="">ebx, 4                  </span><span leaf=""><br/></span><span leaf="">jnz</span><span leaf="">external_args ; 如果大于4个参数，就把当前的入栈                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">r9, rax</span><span leaf="">; 第四个参数放入r9中                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">dec_arg_count                  </span><span leaf=""><br/></span><span leaf="">external_args:                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">qword ptr [rbp+rbx*8+20h]                  </span><span leaf=""><br/></span><span leaf="">dec_arg_count:                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">ebx, 1</span><span leaf="">; 剩余参数-1                  </span><span leaf=""><br/></span><span leaf="">jnz</span><span leaf="">loop_arg_deal                  </span><span leaf=""><br/></span><span leaf="">core_call:                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rax, [rbp+0]</span><span leaf="">; 取出来函数地址                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rsp, 20h</span><span leaf="">; 分配0x20个4参数空间                  </span><span leaf=""><br/></span><span leaf="">call</span><span leaf="">rax</span><span leaf="">; 调用                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rsp, [rbp-10h]</span><span leaf="">; 恢复堆栈                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rbp, [rbp-8]</span><span leaf="">; 恢复伪栈寄存器                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">[rbp+0], rax</span><span leaf="">; 结果存入                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">rbx, rbp</span><span leaf="">; 伪寄存器恢复                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r9                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r11                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">rbp                  </span><span leaf=""><br/></span><span leaf="">; EndHandler                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">rbp, 4                  </span><span leaf=""><br/></span><span leaf="">mov</span><span leaf="">ecx, [rbp+0]                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">ecx, r9d                  </span><span leaf=""><br/></span><span leaf="">sub</span><span leaf="">ecx, 7D526FFAh                  </span><span leaf=""><br/></span><span leaf="">bswap</span><span leaf="">ecx                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">ecx, 24E27C67h                  </span><span leaf=""><br/></span><span leaf="">not</span><span leaf="">ecx                  </span><span leaf=""><br/></span><span leaf="">inc</span><span leaf="">ecx                  </span><span leaf=""><br/></span><span leaf="">bswap</span><span leaf="">ecx                  </span><span leaf=""><br/></span><span leaf="">push</span><span leaf="">r9                  </span><span leaf=""><br/></span><span leaf="">xor</span><span leaf="">[rsp], ecx                  </span><span leaf=""><br/></span><span leaf="">pop</span><span leaf="">r9                  </span><span leaf=""><br/></span><span leaf="">movsxd</span><span leaf="">rcx, ecx                  </span><span leaf=""><br/></span><span leaf="">add</span><span leaf="">r11, rcx                  </span><span leaf=""><br/></span><span leaf="">jmp</span><span leaf="">r11</span></span><o:page></o:page></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_13;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">11. </span></span></span><span style="mso-bookmark:heading_13;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">push [address]</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">根据前文的handler总结，规律大差不差，后面的handler我们用简单的伪代码来表示一下核心逻辑</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg2, [reg1]                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, result_size - operand_size                  </span><span leaf=""><br/></span><span leaf="">[stack_registr_] = reg2</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_14;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">12. </span></span></span><span style="mso-bookmark:heading_14;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">pop [address]</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg2, [stack_registr_ + 8]                  </span><span leaf=""><br/></span><span leaf="">add stack_registr_, operand_size                  </span><span leaf=""><br/></span><span leaf="">mov [reg1], reg2</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_15;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">13. </span></span></span><span style="mso-bookmark:heading_15;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">push segment register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, seg                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, 2                  </span><span leaf=""><br/></span><span leaf="">mov word ptr [stack_registr_], reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_16;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">14. </span></span></span><span style="mso-bookmark:heading_16;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Pop segment register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">add stack_registr_, operand_size                  </span><span leaf=""><br/></span><span leaf="">mov seg, reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_17;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">15. </span></span></span><span style="mso-bookmark:heading_17;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Push debug register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, DrN                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_], reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_18;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">16. </span></span></span><span style="mso-bookmark:heading_18;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Pop debug register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">add stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">mov i, reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_19;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">17. </span></span></span><span style="mso-bookmark:heading_19;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Push control register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, CrN                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_], reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_20;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">18. </span></span></span><span style="mso-bookmark:heading_20;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Pop control register</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">add stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">mov CrN, reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_21;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">19. </span></span></span><span style="mso-bookmark:heading_21;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Push rsp</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, stack_registr_                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_], reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_22;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">20. </span></span></span><span style="mso-bookmark:heading_22;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Pop rsp</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov stack_registr_, [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_23;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">21. </span></span></span><span style="mso-bookmark:heading_23;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Nor</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg2, [stack_registr_ + mov_size]                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, offset                  </span><span leaf=""><br/></span><span leaf="">not reg1                  </span><span leaf=""><br/></span><span leaf="">not reg2                  </span><span leaf=""><br/></span><span leaf="">and reg1, reg2                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8]， reg1                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_24;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">22. </span></span></span><span style="mso-bookmark:heading_24;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Nand</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg2, [stack_registr_ + mov_size]                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, offset                  </span><span leaf=""><br/></span><span leaf="">not reg1                  </span><span leaf=""><br/></span><span leaf="">not reg2                  </span><span leaf=""><br/></span><span leaf="">or reg1, reg2                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8], reg1                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_25;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">23. </span></span></span><span style="mso-bookmark:heading_25;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">shl/shr</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov cl, [stack_registr_ + mov_size]                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, offset                  </span><span leaf=""><br/></span><span leaf="">shl/shr reg1, cl                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8], reg1                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_26;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">24. </span></span></span><span style="mso-bookmark:heading_26;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">rcl/rcr</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov cx, [stack_registr_ + mov_size]                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, offset                  </span><span leaf=""><br/></span><span leaf="">shr ch, 1                  </span><span leaf=""><br/></span><span leaf="">rcx/rcr reg1, cl                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8], reg1                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_27;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">25. </span></span></span><span style="mso-bookmark:heading_27;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">shld/shrd</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg2, [stack_registr_ + size]                  </span><span leaf=""><br/></span><span leaf="">mov cl, [stack_registr_ + size * 2]                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, offset                  </span><span leaf=""><br/></span><span leaf="">shld/shrd reg1, reg2, cl                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8], reg1                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_28;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">26. </span></span></span><span style="mso-bookmark:heading_28;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">div/idiv</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov rax, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov rcx, [stack_registr_ + mov_size]                  </span><span leaf=""><br/></span><span leaf="">sub rsp, offset                  </span><span leaf=""><br/></span><span leaf="">div/idiv rcx                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_], rax                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_29;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">27. </span></span></span><span style="mso-bookmark:heading_29;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">mul/imul</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov rax, [stack_registr_ + mov_size]                  </span><span leaf=""><br/></span><span leaf="">mov rdx, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">sub rsp, offset                  </span><span leaf=""><br/></span><span leaf="">mul/imul rdx                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8], rdx                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 8 + mov_size], rax                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_30;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">28. </span></span></span><span style="mso-bookmark:heading_30;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">fild, fld, fadd, fsub, fsubr, fstp, fst, fist, fistp, fdiv, fmul, fcomp, fstcw, fldcw, fstsw</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">command [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_31;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">29. </span></span></span><span style="mso-bookmark:heading_31;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">wait, fchs, fsqrt, f2xm1, fabs, fclex, fcos, fdecstp, fincstp, finit, fldln2, fldz, fld1, fldpi, fpatan, fprem, fprem1, fptan, frndint, fsin, ftst, fyl2x, fldlg2</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">command</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_32;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">30. </span></span></span><span style="mso-bookmark:heading_32;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">ret/iret</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov rsp, stack_registr_                  </span><span leaf=""><br/></span><span leaf="">pop all register                  </span><span leaf=""><br/></span><span leaf="">ret/iret</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_33;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">31. </span></span></span><span style="mso-bookmark:heading_33;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">popf</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">push [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">add stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">popfq</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_34;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">32. </span></span></span><span style="mso-bookmark:heading_34;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Jmp</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]</span><span leaf="">; 这里读取了但没人用                  </span><span leaf=""><br/></span><span leaf="">add stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">jmp xxx</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_35;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">33. </span></span></span><span style="mso-bookmark:heading_35;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">rdtsc</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">rdtsc                  </span><span leaf=""><br/></span><span leaf="">sub stack_registr_, 8                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_], edx                  </span><span leaf=""><br/></span><span leaf="">mov [stack_registr_ + 4], eax</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_36;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">34. </span></span></span><span style="mso-bookmark:heading_36;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Cpuid</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov rax, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg1, stack_registr_                  </span><span leaf=""><br/></span><span leaf="">push rbx                  </span><span leaf=""><br/></span><span leaf="">cpuid                  </span><span leaf=""><br/></span><span leaf="">sub reg1, 12                  </span><span leaf=""><br/></span><span leaf="">mov [reg1 + 12], eax                  </span><span leaf=""><br/></span><span leaf="">mov [reg1 + 8], ebx                  </span><span leaf=""><br/></span><span leaf="">mov [reg1 + 4], ecx                  </span><span leaf=""><br/></span><span leaf="">mov [reg1], edx                  </span><span leaf=""><br/></span><span leaf="">pop rbx                  </span><span leaf=""><br/></span><span leaf="">mov stack_registr_, reg1</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_37;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">35. </span></span></span><span style="mso-bookmark:heading_37;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Syscall</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">call syscallflag                  </span><span leaf=""><br/></span><span leaf="">return                   </span><span leaf=""><br/></span><span leaf="">syscallflag:                   </span><span leaf=""><br/></span><span leaf="">mov r10, rcx                  </span><span leaf=""><br/></span><span leaf="">syscall                  </span><span leaf=""><br/></span><span leaf="">ret</span></span></p></td></tr></tbody></table><p style="margin-top:16.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:2;"><span style="mso-bookmark:heading_38;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;color:#3370FF;"><span leaf="">36. </span></span></span><span style="mso-bookmark:heading_38;"><span style="font-size:16.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">Lock</span></span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">Assembly language                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">mov reg1, [stack_registr_]                  </span><span leaf=""><br/></span><span leaf="">mov reg2, [stack_registr_ + 8]                  </span><span leaf=""><br/></span><span leaf="">sub/add stack_registr_, offset</span><span leaf="">和result_size对齐大小                  </span><span leaf=""><br/></span><span leaf="">lock command [reg1], reg2                  </span><span leaf=""><br/></span><span leaf="">; xchg: mov [stack_registr_], reg2</span><span leaf="">break;                  </span><span leaf=""><br/></span><span leaf="">; xadd: mov [stack_registr_], reg2                  </span><span leaf=""><br/></span><span leaf="">pushfq                  </span><span leaf=""><br/></span><span leaf="">pop [stack_registr_]</span></span></p></td></tr></tbody></table><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_39;"><span style="font-size:18.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">VMCommand分析：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">前面我们已经掌握了VMP的全部handler，那么，这些handler是如何串起来工作的呢？</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">通过前文的</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">EndHandler</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">我们可看到，每次跳转到下一个Handler之前都会读取</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">伪指令寄存器</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">中的数据，然后解密，再进行跳转，我们以</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">pop rxx</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">为例，看一下代码中是如何处理的，入口点为：</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">void IntelVirtualMachine::CompileCommand(IntelVMCommand &amp;vm_command)</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img style="width:552.010009765625px;height:123.0px;" class="rich_pages wxw-img" data-ratio="0.22363847045191193" data-w="1726" src="https://wechat2rss.xlab.app/img-proxy/?k=52a70dea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKXFvzK5FU6EGBl0Fn5XcgOAooo7FY0tgTjQyq9rKN8synucbA6171hEFG6FTMtsibfxVFUYVfELow%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">首先，代码先对寄存器做了判断，如果不为rsp，则获取，pop rxx的handler（Handlers 中的7)的入口点，并通过GetRegister随机一个寄存器偏移(针对栈)，并将该偏移放在虚拟指令集中</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">在函数的结尾，判断是否是开头第一个指令，如果是，则在开头插入4字节0；判断是否是末尾，如果不是末尾，则在末尾添加4字节0</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img style="width:552.010009765625px;height:238.0px;" class="rich_pages wxw-img" data-ratio="0.4312096029547553" data-w="2166" src="https://wechat2rss.xlab.app/img-proxy/?k=0685475e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKXFvzK5FU6EGBl0Fn5XcgOjv7SEzPnoMABYd3qwpddG0n6icljKHTstl5MDtGThVUhy3UQjIx5bOg%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">即，假设有5个pop，例如：</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">pop rax                  </span><span leaf=""><br/></span><span leaf="">pop rbx                  </span><span leaf=""><br/></span><span leaf="">pop rcx                  </span><span leaf=""><br/></span><span leaf="">pop rdx                  </span><span leaf=""><br/></span><span leaf="">pop rsi</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">那么经过上面的函数，生成的伪指令为：</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">00 00 00 00 18 00 00 00 00                  </span><span leaf=""><br/></span><span leaf="">20 00 00 00 00                  </span><span leaf=""><br/></span><span leaf="">28 00 00 00 00                  </span><span leaf=""><br/></span><span leaf="">30 00 00 00 00                  </span><span leaf=""><br/></span><span leaf="">38 </span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">当然，上面的伪指令是我随便填的，实际上的寄存器存储地址是随机的，通过针对handler的对比可以发现，一个pop读取了5个字节的伪指令寄存器，即(1字节寄存器地址偏移 + 4字节下一条指令地址偏移)</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">那么为什么第一条指令会多出来4个字节呢？那是因为</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">entry_command_中也存在EndHandler</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">当然了，这些0是没办法直接跳转的，所以在</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">IntelVirtualMachine::CompileBlock</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">对跳转地址做了修正</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img style="width:552.010009765625px;height:181.0px;" class="rich_pages wxw-img" data-ratio="0.32963446475195823" data-w="3064" src="https://wechat2rss.xlab.app/img-proxy/?k=a2b55b1a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKXFvzK5FU6EGBl0Fn5XcgOXkb0TjicH3icA5FsVzHHj7fCEKQUXBsD0ibktiaKtAEkOOyUic81wTKWobQ%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_40;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">业务逻辑：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">看到这，恭喜你已经完成了代码主体中的基本流程，我们假设一下，如果我们的代码是</span></span></p><table style="margin-left: 0.0;border: none;border-collapse: collapse;mso-table-layout-alt: fixed;mso-border-top-alt: solid #DEE0E3 0.25pt;mso-border-left-alt: solid #DEE0E3 0.25pt;mso-border-bottom-alt: solid #DEE0E3 0.25pt;mso-border-right-alt: solid #DEE0E3 0.25pt;mso-padding-alt: 0pt 5.4pt 0pt 5.4pt;width: 100%;"><tbody><tr><td data-colwidth="552" width="552" valign="top" style="background: rgb(245, 246, 247);border-width: 1pt;border-style: solid;border-color: rgb(222, 224, 227);padding: 3pt 6pt 1.5pt;"><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;color:#646A73;"><span leaf="">C++                  </span><span leaf=""><br/></span></span><span style="font-size:11.0pt;line-height:120%;font-family:Consolas;mso-ascii-font-family:Consolas;mso-fareast-font-family:Consolas;mso-bidi-font-family:Consolas;font-variant:normal;text-transform:none;"><span leaf="">cpuid</span></span></p></td></tr></tbody></table><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">那么，我们编译后的代码是34号 handler的 cpuid handler吗？答案是否定的，因为这里面还存在着一层业务逻辑</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:center;margin-left:0.0pt;line-height:120%;"><span style="font-family:Times New Roman;mso-ascii-font-family:Times New Roman;mso-fareast-font-family:等距更纱黑体 SC;font-variant:normal;text-transform:none;"><span leaf=""><img style="width:552.010009765625px;height:300.0000305175781px;" class="rich_pages wxw-img" data-ratio="0.5447409733124019" data-w="1274" src="https://wechat2rss.xlab.app/img-proxy/?k=bcd89e8e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKXFvzK5FU6EGBl0Fn5XcgORuHrn5vAM14bd9PU8l70jIV8fnsoicEGHoLLR6KQKFpM1NlERSSciaow%2F640%3Fwx_fmt%3Dpng"/></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">在函数</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">IntelCommand::CompileToVM</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">中我们可以看到，cpuid指令不仅增加了cpuid handler的逻辑，还在之前把</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">rax寄存器的值入栈</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，执行结束后把</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">结果出栈</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，我们回头看一下</span></span><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">34号handler</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">的结构，再回想一下handler的运行过程——</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">参数放栈上，结果也放栈上</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，那么一切就都对的上了。</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">另外，如果是x64下的代码，vmp还会增加把几个寄存器高位清空的动作。其余的业务逻辑就不再贴出来，有时间大家可以自己copy一下源码</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_41;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">总结：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">Handlers中的列表其实并不完整，因为VMP还会初始化几个包含少部分Handlers的虚拟指令列表——我们称为</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">虚拟机</span></span><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">，编译的过程中，vmp会随机一个虚拟机进行指令替换，所以可能会出现cpuid在一个地方为被虚拟化的指令，在另一个地方需要退出虚拟化才会执行cpuid，详情可以参考IntelVirtualMachineList::Prepare及BaseFunction::virtual_machine，这里就不再赘述了。</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf="">文章有很多不清晰或者不对的地方，希望大家帮忙指出，如果错误太大，请大家多多包涵，正如我开头所说的，我不是这方面的专家。</span></span></p><p style="margin-top:19.0pt;margin-bottom:7.0pt;text-align:left;margin-left:0.0pt;line-height:120%;mso-outline-level:1;"><span style="mso-bookmark:heading_42;"><span style="font-size:18.0pt;line-height:120%;font-family:等线;mso-ascii-font-family:Arial;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;font-weight:bold;"><span leaf="">文章参考：</span></span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://mp.weixin.qq.com/s/CpbOGakvdKkWAyZogxpwvw" target="_blank">https://mp.weixin.qq.com/s/CpbOGakvdKkWAyZogxpwvw</a> (VMP3.x内部原理详解与还原思路)</span></span></p><p style="margin-top:6.0pt;margin-bottom:6.0pt;text-align:left;margin-left:0.0pt;text-indent:21.0pt;line-height:120%;"><span style="font-size:11.0pt;line-height:120%;font-family:Arial;mso-ascii-font-family:Arial;mso-fareast-font-family:等线;mso-bidi-font-family:Arial;font-variant:normal;text-transform:none;"><span leaf=""><a href="https://mp.weixin.qq.com/s/UU3fL70Jbw4uwGULxZeK6A" target="_blank">https://mp.weixin.qq.com/s/UU3fL70Jbw4uwGULxZeK6A</a> (VMP源码学习(1) 变异分析与代码bug)</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="2247485663">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=84278eb7&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485663%26idx%3D1%26sn%3D508c4ad1f5163381c0727a6bccd48cc1">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 16 Nov 2025 10:02:00 +0800</pubDate>
    </item>
    <item>
      <title>通过分析加密流量快速检查手机是否中了APT远控</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485653&amp;idx=1&amp;sn=25c4f51fcb58dae070226023ced95ab8</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>为了安全鸭</span> <span>2025-10-20 09:00</span> <span style="display: inline-block;">北京</span>
</p>




<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=03039a46&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHcpNuAH6AZRzh9nS3TcANlWwp1hQaTosSYibkD72k0hDdW4oMLLHg6jQ%2F0%3Fwx_fmt%3Djpeg"/></p>


<h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最近 国家授时中心 被美国用三角测量行动同样的手法攻击了iphone</span><span leaf=""><br/></span><span leaf=""><a class="normal_text_link" target="_blank" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);color: rgb(0, 154, 97);text-decoration: none;background-color: transparent;" href="https://mp.weixin.qq.com/s?__biz=MzIwNDk0MDgxMw==&amp;mid=2247500738&amp;idx=1&amp;sn=15a3608cceb8f229a656a2743e66ef8b&amp;scene=21#wechat_redirect" textvalue="" linktype="text" data-linktype="2"><a href="https://mp.weixin.qq.com/s/XPjT0BVOJPJxSmASW0tXTA" target="_blank">https://mp.weixin.qq.com/s/XPjT0BVOJPJxSmASW0tXTA</a></a></span><span leaf=""><br/></span><span leaf="">众所周知,windows的安全最容易做,即便是有0day,在windows下也一定有办法能检测。linux的安全看linux的系统版本,而手机,尤其是ios/安卓 那一坨,是压根做不了安全的.</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; scrollbar-width: thin; scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241); margin-top: 0px; margin-bottom: 1rem; display: block; color: rgb(102, 102, 102); font-family: \&#34;Hiragino Sans GB\&#34;, 微软雅黑, 黑体, Arial, sans-serif; font-size: 14.992px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">因为系统机制的问题,攻防完全不对等.</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我就在想,我们如何在不用到MVT(Mobile Verification Toolkit)的情况下怎么快速的分析一个设备是否中了0day/apt的远控木马,毕竟开ADB或者iTunes备份都挺麻烦的.</span><span leaf=""><br/></span><span leaf="">首先我想到的是流量设备,因为他非常简单,手机接入网络这个操作谁都会,连个wifi就行</span><span leaf=""><br/></span><span leaf="">而且卡巴斯基发现三角测量行动也是的流量设备先分析到的.更早的飞马 也是流量设备捕获到的.</span><span leaf=""><br/></span><span leaf="">不过我家里也没IDS/NDR设备,也没软路由,搞个流量设备不现实,所以就有了今天主题.手搓一个简单的.</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">地址</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整个项目地址</span><span leaf=""><br/></span><span leaf=""><a href="https://github.com/huoji120/mbnsc" target="_blank">https://github.com/huoji120/mbnsc</a></span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">这东西电脑应急响应也能用.不过windows上没设计解密RPC.MAC用了谷歌不维护的gopacket不知道能不能用.linux也得看gopacket的兼容性.</span></p></blockquote><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">设计思路</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整个设计路线非常粗暴,我们搞一个抓包工具,用go-packet用libpcap进行抓包.然后我们把数据包变成一个JSON,本来想变成ELK里面的,但是考虑到便携性,还是算了.我们没必要那么重.</span><span leaf=""><br/></span><span leaf="">之后就是python的分析了.而我们目的很明确,检测APT,所以思路是:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">IP/DNS/SNI 先过一次情报</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">检测抖动心跳 -&gt; 这个是关键</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">流量模式匹配,匹配特定的流量</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">（1）很好理解</span><span leaf=""><br/></span><span leaf="">（2）主要目的是,中马后,通常是多少分钟/多少小时 来一次心跳,通过心跳来检测C2是绝对靠谱的.不会错的.要是看到10分钟一次/1分钟一次/一个小时一次的心跳,或者N久才连一次服务器的网络,那就是了.</span><span leaf=""><br/></span><span leaf="">（3）的主要目的是,辅助我们看流量的类型，虽然流量是加密的，但是我们任然可以通过接收/发送/频率做一定的模式匹配,去匹配一些相关的,上传,下载,http请求,混合交互,心跳等模式.虽然不是100%准确,但是很值得我们研究.</span><span leaf=""><br/></span><span leaf="">具体我们直接实战:</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">教程</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">部署</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">电脑上开热点,手机链接热点</span><span leaf=""><br/></span><span leaf="">然后,编译好go程序,直接运行,会显示出网卡列表,选择一个网卡,一定要选,热点的网卡.不要选错了.</span><span leaf=""><br/></span><span leaf="">如果你选错网卡了,会什么都抓不到.</span><span leaf=""><br/></span><span leaf="">如果你选了电脑的网卡,不是wifi热点的网卡,则会抓整个电脑的流量,而不是只抓手机的流量</span><span leaf=""><br/></span><span leaf="">所以选择手机的wifi的网卡很重要!(还要注意不要选wifi链别人的那个网卡,要选热点的那个网卡!)</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">选正确后</span><span leaf=""><br/></span><span leaf="">xxx.exe -i 网卡名字</span><span leaf=""><br/></span><span leaf="">然后手机访问网络都有链接:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001986" data-ratio="0.22592592592592592" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=ff36b30b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHicAWRjdqPJOTdT0s4MNlgKpYsEncXuQd8y4CqGZ8ricEaOCrAiaiaXTMKg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这样才是正确的!</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">抓包开始后,建议操作,重启手机,并且息屏等10分钟或者一个小时,在电脑内存允许的情况下,放置久一点.因为我也不知道心跳什么时候回来</span><span leaf=""><br/></span><span leaf="">当抓到一定数量的包后,ctrl+c抓包软件,会生成一份JSON.用目录下的analyzer进行分析</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">python .\analyzer.py .\capture_stats_20251019_221220.json --proxy --proxy-host 127.0.0.1 --proxy-port 7890</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果你有OTX的威胁情报key,你也可以接:</span><span leaf=""><br/></span><span leaf=""><a href="https://otx.alienvault.com/" target="_blank">https://otx.alienvault.com/</a></span><span leaf=""><br/></span><span leaf="">我本来想用国内的威胁情报的,但国内威胁情报API无一例外都收费,不如用国外的otx的</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">--otx-api-key YOUR_API_KEY</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">等一会,分析完毕后,我们就能看手机这段时间内访问的信息了:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001989" data-ratio="0.5361111111111111" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=0c52fd13&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHoZLs9GNqrxN5xibLHJEYVJkibfwJd6PQJN6vHI8OwWOrSsT7IavXgyng%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这个html一共有两个部分组成,首先是图表,他是能快速分析的地方</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001988" class="rich_pages wxw-img" data-ratio="0.662962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=323606f6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHnHK0aQOubGUFDXBQMyXtn31fE3UVZucS57ibY3NMPprQ3UYm1ca8Yug%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">另外一个是总览表格</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001987" data-ratio="0.6666666666666666" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a536a71f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHr3aNrDZvHqKj9I1eicpDqsKyHs5PNicB3Aj2MusLQC32ia14oq2P3bZqw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">快速威胁检测</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果你部署了OTX的API,拉到表格下面,有IOC</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001985" data-ratio="0.15648148148148147" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a143070c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHB3gPOsGiaqXXpFasUt1D7O4OYvaWkAIcc4zokK1PbYIeNxHxWO2LtNQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">比如我的xred蠕虫的C2,我测试访问的</span><span leaf=""><br/></span><span leaf="">然后在图表里面也会有表格</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001993" data-ratio="0.4083333333333333" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=9ac4e3bf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfH2Dps7ohFN0HdpykXcqp8xJiavAQJtMqIPBbApuotibnbML2z4Aico4c6Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">注意,OTX的情报并不是准确的,他很多CDN服务器,114dns服务器之类的会被标记恶意,这个是正常的.毕竟他是社区驱动的.</span></strong><span leaf=""><br/></span><span leaf="">而且考虑到apt的远控不太会暴露,所以IOC数据只能说看看就行.</span><span leaf=""><br/></span><span leaf="">第二就是国外IP</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001991" data-ratio="0.24864864864864866" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="925" src="https://wechat2rss.xlab.app/img-proxy/?k=f757b593&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHm8J299hynYNqOkvKP4lfcUAepBbqu259EsWQc7ny6Cwx0JFxG6hmbg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">国外IP在一个手机里面占比非常少,建议快速check,国外和香港台湾的这几个IP.</span><span leaf=""><br/></span><span leaf="">第三就是看心跳</span><span leaf=""><br/></span><span leaf="">心跳包的特征如下:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001994" data-ratio="0.4009259259259259" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=65bb7b82&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHERJNx93vU6sQdBrEBjRbq6gicJesYkHWpQfhClqj8XkWbyCd3hXFNXg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这种就是非常典型的心跳包,你可以看到X秒来一次发送接受.</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001992" data-ratio="0.34974533106960953" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="589" src="https://wechat2rss.xlab.app/img-proxy/?k=f85b603c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfH3THA3ibMCic9mFkqJzePcTtBOULJ0QQyyj8fDCLyDsJLqmic0SicIz00CQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">如果心跳包是已知手机域名,那没什么问题,如果你看到</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">一分钟以上来一次,或者十分钟来一次,或者一个小时来一次</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">IP是非大陆地区</span></p></li></ol><div><p data-pm-slice="2 2 []"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;data-pm-slice&#34;:&#34;2 2 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">那你需要额外警惕.</span></p><p data-pm-slice="2 2 []"><span leaf="">建议用qax的威胁情报平台进行二次确认:</span><span leaf=""><br/></span><span leaf=""><a href="https://ti.qianxin.com/" target="_blank">https://ti.qianxin.com/</a></span><span leaf=""><br/></span><span leaf="">我不推荐别的,因为qax的情报对APT追踪是最敏感的</span><span leaf=""><br/></span><span leaf="">还有就是辅助的,卡巴斯基的平台</span><span leaf=""><br/></span><span leaf=""><a href="https://opentip.kaspersky.com/" target="_blank">https://opentip.kaspersky.com/</a></span><span leaf=""><br/></span><span leaf="">这两个二次确认即可</span></p></div><p><span leaf="">比如我的,虽然是心跳包,但是是小米手机追踪的东西,不知道是什么,但是应该是暂时没问题</span></p><p data-pm-slice="2 2 []"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001990" data-ratio="0.7552083333333334" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="384" src="https://wechat2rss.xlab.app/img-proxy/?k=d2ea6087&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHaxdzeWjU8Lvf4iabu31BLvuibuSDD0DXEurtxfGJaTINRgsQavJFg8FQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">其他流量特征</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这有几种常见的模式匹配</span><span leaf=""><br/></span><span leaf="">比如这个,当你发现,send比recv小的时候,那一般就是下载流量,比如我这是美团下载的流量</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001998" data-ratio="0.6648148148148149" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=4c0712ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHRf6cch6lrvSGAkDnswPRdgs2Jw6Kz3edAS7viaj41cwad6l2Duvh0Og%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">被阻断的: 单向发送,没任何的recv的,比如如下是谷歌的域名被阻断了</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001997" class="rich_pages wxw-img" data-ratio="0.6953703703703704" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c02f1063&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHt6fxG0xZtMOIQ7CtV7Ik9tfXq5ajgQcxf8AnSrMXKH0BghqOhtIvIA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">典型心跳:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001999" class="rich_pages wxw-img" data-ratio="0.39166666666666666" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=a8e8d88b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHUJ1r0ATJ9q54PswRscc4ZABMOFKANvjV4ZWf1V5j8XicEv7qOPibNEpQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">经过排查,这个IP是小米的消息通知推送,也确实是心跳,x秒一次:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001995" class="rich_pages wxw-img" data-ratio="0.18522267206477733" data-type="png" data-w="988" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=445677d4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHlHqFHQeJkb9JTJ1l8CXSCdrU2XttbA6EJY1j8woDGc7IOSgldFQ3iaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">上传,美团的report域名</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001996" class="rich_pages wxw-img" data-ratio="0.3101851851851852" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=bf602ce3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHRAe1eV56Bpkl5FP4arShv9x7ic0898I2fWvz8gFjc7bIMpvunlPwAaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100002001" class="rich_pages wxw-img" data-ratio="0.34074074074074073" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=59ad93e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWKxWicpMFmVqzewPzIDsbibfHSysqibqu1seZmicu0jLmhgjgDzCeVcN23GeDCxn2Icibw6pJ0icIQRicw0g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结语</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后,经过检查,我确认我手机没问题.可以放心睡觉了</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="2247485653">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8cdbaf02&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485653%26idx%3D1%26sn%3D25c4f51fcb58dae070226023ced95ab8">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 20 Oct 2025 09:00:00 +0800</pubDate>
    </item>
    <item>
      <title>中秋特辑:中外AI大战!让AI们通过MCP玩帝国时代2</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485632&amp;idx=1&amp;sn=5099048f6d21234acfacb5f13d2c7545</link>
      <description>前言说来话长, 熟悉我的人都知道，我每年国庆都会在家整点活，去年是深度研究APT组织Storm0978的高级注</description>
      <content:encoded><![CDATA[<p>
原创 <span>为了安全鸭</span> <span>2025-10-06 10:01</span> <span style="display: inline-block;">北京</span>
</p>




<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=41089751&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpjX5wW2b6EPqOLC3KDL4bWibbKvA5Dt0jRmf6SMzT0MGsrnLEG0q3IHQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">前言</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">说来话长, 熟悉我的人都知道，我每年国庆都会在家整点活，去年是</span><span leaf=""><br/></span><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247484443&amp;idx=1&amp;sn=d75d5cb737745dd9d5106967bfd94f55&amp;scene=21#wechat_redirect" textvalue="深度研究APT组织Storm0978的高级注入技术StepBear" data-itemshowtype="0" linktype="text" data-linktype="2">深度研究APT组织Storm0978的高级注入技术StepBear</a></span><span leaf=""><br/></span><span leaf="">今年是AI通过MCP玩帝国时代2!</span><span leaf=""><br/></span><span leaf="">本系列非常非常非常复杂,原因是我一开始只是想做个能自动帮我玩帝国时代2的脚本,但是做着做着我突然觉得没意思,就改变想法搞个让大语言模型玩游戏的MCP。事实证明已经严重超出我得工作量了，不过经过快一个星期的逆向，分析，模型调用调优。我终于取得了进展。这一切都是值得的!</span><span leaf=""><br/></span><span leaf="">我们先说偏娱乐的部分,中外AI大战!</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">帝国时代2</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">帝国时代2是我最喜欢的游戏，玩了快15年了.如果你不知道他是什么, 他是一款类似于红警的RTS游戏,跟红色警戒不同,他是慢节奏游戏,一把大概一个小时。所有人要采集资源,然后从黑暗时代升级到封建时代-&gt;城堡时代-&gt;帝王时代</span><span leaf=""><br/></span><span leaf="">然后互相伤害:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001799" class="rich_pages wxw-img" data-ratio="0.5333333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c1271449&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpaGib0NFRiaN3nZgYDsc9Y6FNBXtFZiaBaX8I4icNibKhKt2bDQULATZclgQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">我用的是steam的决定版本,因为他还在更新:</span><span leaf=""><br/></span><span leaf=""><a href="https://store.steampowered.com/app/813780/Age_of_Empires_II_Definitive_Edition/" target="_blank">https://store.steampowered.com/app/813780/Age_of_Empires_II_Definitive_Edition/</a></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">MCP</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">MCP的具体设计思路下一篇再说了,总之我们有了一个能让AI操控升级时代/移动/攻击/研究科技的MCP了</span><span leaf=""><br/></span><span leaf="">MCP代码大概长这样,claude写的,1000多行:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001796" class="rich_pages wxw-img" data-ratio="0.5111111111111111" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=05564fde&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtphKZsPEpv2uDfryC3IibhJV7Xf2RowvphT8HlrBrbmd4MMs22rRJfUBg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">claude是第一个(也许是世界上/人类上第一个),从黑暗时代升级到封建时代的AI!</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001797" class="rich_pages wxw-img" data-ratio="0.8435185185185186" data-type="jpeg" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c3e840b0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpXZG6B0fSLfSgicbOWn05ZCB4SDjibfKt45YTuqFqgEqQPuibKWDw6V3Mg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">并且还会训练马厩</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001798" class="rich_pages wxw-img" data-ratio="0.4888888888888889" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b9121471&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpaic9sEpmQ2BnHT4Lffv2NSUbKXavpGOKp7AzFDFCVvTYNCJhqlCibtJg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">话不多说! 让我们直接开始主题! 但是在直接AI大战之前，我进行了一轮初筛，毕竟一局帝国时代2大概要一个小时，我没那么多时间浪费，而且这些模型还是要付费token用的，我也没那么多钱，所以我决定先拿现在的模型进行一波简单人机对战，谁赢了才选出来！</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">先说一下各个AI的表现吧,我们的AI Agent有两个模型在混合工作.一个是军师,他是各家模型的最强think模型,根据游戏状态和历史会话总结部署战术的人物</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001795" class="rich_pages wxw-img" data-ratio="0.5899880810488677" data-type="png" data-w="839" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=91b7df15&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpJ40nG0l9QiakOGuicUuW5DCr55zt2HsA2e4ZHTMaKRl0p2N9UW8sQhGQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">一个是实际操作的,他是非think模型,因为think一次太慢和太耗费token了,所以要快:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001800" class="rich_pages wxw-img" data-ratio="0.39537037037037037" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=f502aaaf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpY6eMCFjDK47c64SVbencpY0KCK7vRyzf5BpwLyIR0rwRhJ4wnDKLTQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">接下来我会简单说一下各个模型的玩这游戏的玩法,以下数据我通过几个维度评估模型好坏:</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">闲置村民数量</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">战术得分</span><span leaf=""><br/></span><span leaf="">满分五分</span></p></li></ol><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">国外模型</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">claude</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">综合评分: 4.8分</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">但是有一处非常奇怪,他非常喜欢采集外围资源不采集自己的.并且会无上限爆农民导致没人口造兵。</span><span leaf=""><br/></span><span leaf="">还喜欢去别人家偷资源:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001806" class="rich_pages wxw-img" data-ratio="0.5333333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d77884b9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtph6rdbYTCO9HNQRtSU9U9NhydtwmHcQkQmAKcoCGgoibl3ib2WxGciaE6A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">不过还是后期通过爆骑士打败了简单电脑</span><span leaf=""><br/></span><span leaf="">第2天测试,开局,基本完美贴合资源建造,这个是我第一次见空间感这么强的AI,其他家的包括GLM都做不到完美建筑位置开局</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001805" class="rich_pages wxw-img" data-ratio="0.4583333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=851a3be1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpPfSxkbtqAM3h9TFwQSdL1eDAias0zIWTmUzicla16Vl7ZzTzKS2LM8ZQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">不过失误还是有的,两个村民杀猪没了:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001804" class="rich_pages wxw-img" data-ratio="0.6607407407407407" data-type="png" data-w="675" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=53c0ccea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpl9xJaBXIibLDVzX5NtXCicEDlapZJHKbbdKdmbfiaAWFKBJzROpaecVEA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">后期毫无悬念的碾压了简单人机，从规划到进攻表现算亮眼</span><span leaf=""><br/></span><span leaf="">本来想因为后期的操作给5分的，但是他太太太贵了！！我一看钱包只能给他4.8分了。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">GPT-5</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">综合评分: 3分</span><span leaf=""><br/></span><span leaf="">我也不知道为什么,gpt5我是API版本真的跟弱智一样.原地等了五分钟才发展,在此之前一直在废话:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001803" class="rich_pages wxw-img" data-ratio="0.5333333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d41680dd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpibN3EFW8FoZCPWgxgRyssHibia8V6q3rFDm4f7qAn25WXZ5Z0om0V1ibjg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">但是没任何工具调用!发展了一会后,然后开始玩角色扮演了….</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001802" class="rich_pages wxw-img" data-ratio="0.37725118483412323" data-type="png" data-w="1055" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c1dbc17e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtppyr8vUmQ9tT9LwqUEh7xeKNBUBpTq43Hzc5UeolqqEcicd0ibib4U3tFg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">然后自己回答自己上一个问题 继续角色扮演</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001807" class="rich_pages wxw-img" data-ratio="0.3919491525423729" data-type="png" data-w="944" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=39a1a879&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpVgjFykbDfPZibMEEn9bRrcPsKTvEasUaPr8710LxmDuQAibjsEMBKECA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">然后就这样无限循环了…</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">grok</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">跟GPT的毛病一样,前几轮还好还在工作,后几轮就开始在玩起了角色扮演了,忽略</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001811" class="rich_pages wxw-img" data-ratio="0.47685185185185186" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9346a511&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp15wsKQoaWiaYuET4RicfjTNaOicR6glQaoRz0Ev58zzcKZYQgia6GWhuMg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">gemini-2.5-pro</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">综合评分: 2.0分</span><span leaf=""><br/></span><span leaf="">这玩意纯粹搞笑的,每一句话都带了纯粹的语文快乐</span><span leaf=""><br/></span><span leaf="">比如</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001810" class="rich_pages wxw-img" data-ratio="0.29074074074074074" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b3af004c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtptJKZibicsNIuCATYFhCodnGphdiasJHicKMaj2wHXL9mHwXzheA4amR1jw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">又比如</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001808" class="rich_pages wxw-img" data-ratio="0.2972222222222222" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=ac0dc521&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpYX0mNtfNTyz7IQEQZb8qj3OGdrgpUJ67xicnDMIpaiaYpNarvTwmweTw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">再然后</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001809" class="rich_pages wxw-img" data-ratio="0.1935185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=839e076d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpBBW16RhycBGcUqiaCXYbh2m7hZPDSPNEqHTE8iaxcQPpliaucPgM0S54A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">还有,发现地方侦察骑兵在家门口,他就”组织农民敢死队”把所有空闲农民去砍侦察骑兵…</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">搞笑是搞笑,但是拉了,因为他前期一大半时间都在尝试建造市场，而系统提醒他那个地方不能建造，他每次失败就写个悲剧文，然后继续尝试在那个地方建造…最后在面临电脑”大军”的时候, 他最终选择建造弓箭手对抗投投矛手,然后输了(ps 帝国时代2里面,投矛手克制弓箭手)…</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">国产模型</span></h2><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">deepseek</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">综合评分: 2分</span><span leaf=""><br/></span><span leaf="">deepseek前期规划不错,农民全用了.但是一旦野果采集完毕后,他就不太行了,他也不会种田,也不会狩猎,后期会直接崩坏甚至是投降，而且我确定他没训练过帝国时代2,经常搞错单位升级什么的.但是至少会出兵打一下简单人机…</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">他像极了我的第一次玩帝国时代2,会建造防御箭塔在家周围,发现打不过选择来一点”高科技”:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001812" class="rich_pages wxw-img" data-ratio="0.13604766633565044" data-type="png" data-w="1007" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=38192ba3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpX9Wx3icj3DI1wSTQH3OkT1ogpuAesOzDWGIeOGYScjibDD37xhXBttibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">他的高科技:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001813" class="rich_pages wxw-img" data-ratio="0.5451127819548872" data-type="png" data-w="266" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=1cf52331&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpJib1Kb9OWWa5MLJmU5oZCIr2VlhRlhBmppcIFFJzicvMoV3ibM2IrqHwg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">战术也是有的: 比如埋伏一队兵在对方家里杀农民:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001815" class="rich_pages wxw-img" data-ratio="0.34814814814814815" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=6c31df6b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpZico76H949l9byJoUSPS2Jf7KhLnHkyHib7h2a43cnRcfBLkUMITPVIw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">只不过越玩越崩坏,有些时候还会投降（他是AI里面唯一一个投降的，而且在经济巨好的情况下….）</span><span leaf=""><br/></span><span leaf="">deepseek投降,原因是他的”大军”-6个骑士被敌方指挥中心射死了:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001816" class="rich_pages wxw-img" data-ratio="0.5342592592592592" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=2a20a4e9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp71rvN4p9rJnnWicyCX4566fVybPAhgImfc7iaKicnvwaicrGetiaiaiaibV3MQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-imgfileid="100001814" class="rich_pages wxw-img" data-ratio="0.4546296296296296" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=56c956bb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpjAoWcIEKAibFCeUXY8dkXfM5vpUXhSUcQ4Qyz5ClyNaicJpXQpG8P82g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">qwen</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">由于他的think token消耗太吓人,算了.我没那么多钱.具体吓人来说,为了做一个动作就要暴力think非常久.如果不think他就基本不智能….</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">豆包</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">太慢了，调用一次黄花菜凉了,没时间等他思考..所以放弃</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">GLM4.6</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">评价: 5分满分,非常亮眼操作</span><span leaf=""><br/></span><span leaf="">真正的神！这不是广告，在耗费50元后，他压倒性的打败了简单电脑,并且会战术.</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001819" class="rich_pages wxw-img" data-ratio="0.6524822695035462" data-type="png" data-w="564" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=13ead73e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpdVGD0iamDZnWSMlW0vB9d0IwJtYYaV2hSkAGhHqt3HGrGQNmLu8XJ6A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">集结单位 包抄</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001818" class="rich_pages wxw-img" data-ratio="0.5851851851851851" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=270b928b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpdsS6lWBJyAL4UDuq4r7mo3tuvQpss2xOHpAgrqAKQcJuRic6JMAhSxw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">袭击对方军事建筑 封建压制</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001817" class="rich_pages wxw-img" data-ratio="0.6701030927835051" data-type="png" data-w="970" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=eb9272ad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpzKeZHEKDY2tn1toNwE4sZic9YGEZmTte5ibVZyJHllO6VjYleFakfcgA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">我故意放水用作弊码让AI有城堡后,他选择造攻城车</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001820" class="rich_pages wxw-img" data-ratio="0.7730769230769231" data-type="png" data-w="1040" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=aed47d77&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp5LRrQGBQEYbXvsS2SVqonaz8AAUgnOubZkd7wRycib8pmFk8GDsiaM2Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">最后胜利</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001821" class="rich_pages wxw-img" data-ratio="0.5333333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=93101e3f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpfB3cueoUaWEkFb85AQZvoibDCAibdOtwhS9zduXIWJZa9NJLkPPPHvLg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">kimi-k2-0905-preview</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">综合评分: 3.5分</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">他有点太敏感了:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001825" class="rich_pages wxw-img" data-ratio="0.41759259259259257" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=bb46885c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpiaic5ibqZjWNzibMlm4qIgUYdoibU5P6TpDkmTGAujiczO8byc1VXDMhScXg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">一个侦察骑兵让他所有农民全部回防…</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后就开始崩坏了,这些回防的农民全部不动了,导致他升级不了时代,就这卡着耗费我token</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而且封建升级什么的错了,感觉跟ds一样没有研究过帝国时代2</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001824" class="rich_pages wxw-img" data-ratio="0.5231481481481481" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=669937df&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpMnwxKGWcGhEJl69oB0SPYRYlaQu0RVjBrcXZgicBwgKVLHeOFGUuAWA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">不过令我惊讶的是他在尝试计算还有多少分钟升级,有一点那种电影里面ai计算还有多少分钟可能性的感觉了.</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001823" class="rich_pages wxw-img" data-ratio="0.4004739336492891" data-type="png" data-w="844" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=23a62565&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpyp6kZV8wH6r3Sia9UFzmdfbYEG5gOBYVU2a98ykumOxhJz89dPK005A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">花了我快十块钱后还是毫无进展:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001822" class="rich_pages wxw-img" data-ratio="0.24" data-type="png" data-w="275" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b7841163&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpx87iaxicxHgf2HRG5nJYxbHy0L1L8wepgWIXENqQCsHUSrtfeTOp7Xrg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">最后挂机了一会升级到封建时代了,我发现他开始跟gemini一模一样,开始逐渐崩坏..</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001827" class="rich_pages wxw-img" data-ratio="0.6771397616468039" data-type="png" data-w="923" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=09d2ef28&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtprX8nMrWsfpwq4epKar2ibvU58LSWtJIllNDq9Sbh0OBZro9RASwa85A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">但是不得不说,非常可爱,跟我以前第一次玩帝国时代2一样,建造几个垃圾兵种在”边疆”站岗有安全感</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001828" class="rich_pages wxw-img" data-ratio="0.4935185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=989eb4dc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpsiaF1E43rB7E3hMTbBVh7TEGrt1geSVI2y44QfMmuhwB9avZNBo2IHg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">最后我的钱花了16还是没进展,我就终止了他</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001826" class="rich_pages wxw-img" data-ratio="0.19365079365079366" data-type="png" data-w="315" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=e8188e29&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp3e4WenOibvBfMS13CpG7AfJKTUt3FqLEZVkr9tIZq1RbdB5Ugd6pQnA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">Claude-4-5-sonnet VS GLM4-6</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">综上所述,我准备举办一个1v1的比赛,本来想4v4的,但是要八个电脑而且要很多钱,我就放弃了.要让有人想搞的话可以关注我的github不定时开源.(虽然开源可能性非常小因为很容易被拿去做外挂)</span><span leaf=""><br/></span><span leaf="">一开始,GLM和claude战术一致,都选择了快速升级封建</span><span leaf=""><br/></span><span leaf="">GLM:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001887" class="rich_pages wxw-img" data-ratio="0.4583333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=6a4661ee&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpSmibboSPfW7IVugiamRBib1ZlLXHyic62bZRzVCkJWhyibUH8NwibDluct9g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">Claude:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001886" class="rich_pages wxw-img" data-ratio="0.5083333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9fa7d2c4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpEXReYCk9ib9PvYrSB7eoB21LwibT5Fau4ibomNU19tyvy13Xh3ibaoQibeA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-imgfileid="100001884" class="rich_pages wxw-img" data-ratio="0.33962264150943394" data-type="png" data-w="795" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=54b00587&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpIib2uDfLDTkBQTlQicibAYicW6NYQLactib24aWSSmbnwtmFKOQ5TviaaQfQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在和平发展了一整子后,GLM派出了一个侦察兵发现了别人的位置,而这让CLaude非常不安:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001888" class="rich_pages wxw-img" data-ratio="0.6564814814814814" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=8f44ff19&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpvaWCW8nzeYCwicibDwvKmoyB63T6eEy7pLW503h73RjCn3VoWg0C0fqQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001885" class="rich_pages wxw-img" data-ratio="0.45933014354066987" data-type="png" data-w="1045" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=572d5344&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpiba9O9moRTckNT3J2KDIPuye1XjBkqCcbNGAHicbx3WYxAo0PqAwnpeA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001889" class="rich_pages wxw-img" data-ratio="0.15399422521655437" data-type="png" data-w="1039" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b773e210&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpxnzvwzLDbWv6k6ZsdLFcCC5KLd7yqlqbicJoKduia9EQ33mMNVrQH56A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">从而让claude选择立刻出兵营,把有限的资源投入到军事里面</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001891" class="rich_pages wxw-img" data-ratio="0.45092592592592595" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=6892405e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpmbIpNXlR393wp8oYpyx8kzK4lfvFCWzEunYicib08uQBmcU0shIFspNg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">而正是这个举动,让CLAUDE经济落后了GLM</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001892" class="rich_pages wxw-img" data-ratio="0.5407407407407407" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=8fd21d44&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpgEPib7U6LFQDXFRpnaBbaibFljjwvDGjUIP91KZuiaAOeZR96rKcpE3QA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">但正是这个举动,让GLM也陷入猜疑链,怀疑别人要进攻自己,立刻建造了一个兵营,并且训练了两个民兵</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001890" class="rich_pages wxw-img" data-ratio="0.4675925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=4e23d7fe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp2IX3TqmicNv3qHpdVBnB1DLoknk4R7c7XsVPM7uFU5cKEQdcO6iaXytw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这样对峙了一段时间后:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001893" class="rich_pages wxw-img" data-ratio="1.039572192513369" data-type="png" data-w="935" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=6153e364&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpqSb99Jxx0eJZLMuqD7QRE9aS2dshEq0Ooc6ylBJtDY0BEcmbbKkDUQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">claude率先犯蠢,他认为远方的树比较安全..就派了四个村民去,但是被野生动物袭击：</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001898" class="rich_pages wxw-img" data-ratio="0.5796296296296296" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=32f71260&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtplxnSnabviboh1EVoqq3fVm7TsZKHP3zaMxq7G1KarchTjUxdZRSVGeA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001895" class="rich_pages wxw-img" data-ratio="0.37535410764872523" data-type="png" data-w="706" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b096b7b9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp38EYVia6kpBo2TkP2aOemAnTb8WDwb1ZRjewnbSczNeJCcIQDnPiajsQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">然后他发现了,想立刻召回,不过来不及了:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001894" class="rich_pages wxw-img" data-ratio="0.337037037037037" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=ba2e1e0e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpIt8CKTRFD1lZdOzXibAnvPKclvFQKVqicLvbYQDXkyJvFg1ANicGAsf3A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">不过来不及了,这四个村民的损失导致claude经济大比分落后GLM</span><span leaf=""><br/></span><span leaf="">但是他却是第一个升级到封建时代的:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001896" class="rich_pages wxw-img" data-ratio="0.3298791018998273" data-type="png" data-w="579" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=21bad48a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpicicKchYStUVTusC9GZYZMc2lahialYhdd8w5lqDfFHt4qutGc111CeLA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这是因为我们的GLM犯傻了,他认为封建时代是需要500肉,200黄金,然后派了一堆村民采集黄金….</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001897" class="rich_pages wxw-img" data-ratio="0.5083333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c39dfa2a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpTzDpYyiaLNUc7q6tibXpwm0t9ibxQdYZZCdib5LLFCCdAtlqrhd5oJac5w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">导致慢了五分钟才进入封建时代.这非常致命!</span><span leaf=""><br/></span><span leaf="">然后GLM认为需要派部队保护金矿</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001900" class="rich_pages wxw-img" data-ratio="0.7156580211335255" data-type="png" data-w="1041" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=bdb8ff99&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpA01h5FzKuG1hRj8dWI0lJEVDHWOBQLUbbScBC5GpUKfLt31ma6FeIQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">双方升级到封建后又和平发育了一段时间,但是CLAUDE在连续尝试在磨坊建造农田失败后,派出了几个农民去地图边缘建造农田…但是不出意外,又被野生动物咬了</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001901" class="rich_pages wxw-img" data-ratio="0.4898148148148148" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=21dd6e23&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpyjuhGfbceg3ZxCkZD0PIjEfPnxnNXme4lZlBuTkwBy5tx9ic4Zpib3Sg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">与此同时 GLM的农田铺的非常工整:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001903" class="rich_pages wxw-img" data-ratio="0.48055555555555557" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=a28fea09&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp8v9VOsq1PJ932Z9osACgcVSc8WuVpBmQa8MnvXIzBlIibCwOSWrJCUw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">与此同时 claude又把农民撤回来了:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001902" class="rich_pages wxw-img" data-ratio="0.1685185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=ae98e827&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpWuKHrKecbw214WoF3knRYURLFGn9dzUb7OwIUrtO35tddltRP7q44g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">而这个时候GLM准备升级城堡时代了</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001899" class="rich_pages wxw-img" data-ratio="0.7305555555555555" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=eeb90749&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpqhic2kYicib4Ez921avECKyBib5jPP2Lic4wkicvVhgRqKDjyT95CQUMNa8g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">市场/铁匠铺关键科技已经准备就绪</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001904" class="rich_pages wxw-img" data-ratio="0.7305555555555555" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=24e7ea7e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpsXnKotuwGyUVqsbFNPhIY01wfmfUhDibicAddWE4dicAogtewYQxpJm6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">而claude还咋想办法研究为什么他的农田造不了:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001906" class="rich_pages wxw-img" data-ratio="0.5259259259259259" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=450d049b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpMedBrEOO3iaARu402d8yiaOI8GSM2Vo5lSLaZyFKISGW7gCDk3x4n8Yg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001905" class="rich_pages wxw-img" data-ratio="0.40370370370370373" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=14dc94df&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpPJJia0PoyibDR305IPic3P5aZWrhhO9BPia25rt8cVfWibsd1F9IibV0QC5g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">GLM已经进入城堡时代</span></p><p nodeleaf=""><img data-imgfileid="100001939" class="rich_pages wxw-img" data-ratio="0.3918032786885246" data-type="png" data-w="610" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=e5740acc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpamYaVHCRiapyWRB1YQMvPlL1AXbCSLSI89cIxPJexpFLKU7Gt9yCMaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">但是进入城堡时代后,GLM不想进攻却想着发展经济:</span></span></p><p nodeleaf=""><img data-imgfileid="100001911" class="rich_pages wxw-img" data-ratio="0.5212962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=fb6bebf2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp52e8SibalxN4xj0ltYHw7oWnP6xO5LNdWRibpicEZU9uPk52Wtia5MYaLg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">这导致claude也进入了城堡时代</span></span></p><p nodeleaf=""><img data-imgfileid="100001909" class="rich_pages wxw-img" data-ratio="0.36666666666666664" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=e65c0c9e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpEzy5zowttHGUhfHXAascHnBQXuMnp3usDtgLu3TSPuLGdJpRcMjBQA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">目前两方对比图</span></span></p><p nodeleaf=""><img data-imgfileid="100001910" class="rich_pages wxw-img" data-ratio="0.884375" data-type="png" data-w="960" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=80251566&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpSPOBCmUzrJdz8gDn8IXrYwIvDqzDicIZpzxMR0ErWfy4loGFf8XlGibQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而claude进入城堡时代后,第一件事就是策划进攻计划,准备使用联合部队进行进攻:</span></span></p><p nodeleaf=""><img data-imgfileid="100001907" class="rich_pages wxw-img" data-ratio="0.6082089552238806" data-type="png" data-w="804" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=55eaa509&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpHXmxQYLYBxwFFfQsPMMOK4huyKjiaQm1jpPd2TiaJ9I9XcBBUZELpMUA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而这个消息也被GLM捕获到,GLM也加快了战备速度</span></span></p><p nodeleaf=""><img data-imgfileid="100001916" class="rich_pages wxw-img" data-ratio="0.5212962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=d7befa4c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpYSZde12zOTAefPibibYh1P2z8VjAn3YEVxoHvybZ8JNo9OicdArfYic4Pg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">claude在一般部队外,还准备了攻城武器</span></span></p><p nodeleaf=""><img data-imgfileid="100001912" class="rich_pages wxw-img" data-ratio="0.48696682464454977" data-type="png" data-w="844" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=51163e1d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpHhJAt0D6cJseFSetNicZqJgIibqrak1EHkygfmdWpe3Tkrm4j56cupFQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">claude第一波攻势是采矿场</span></span></p><p nodeleaf=""><img data-imgfileid="100001913" class="rich_pages wxw-img" data-ratio="0.5138888888888888" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=cfcc4e41&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpmXVVqWj7WbvYOaN8Bk06LmTibNZgxqLU84gXc6rwcHwKnQTvyiaWRCzA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而与此同时,GLM却在关键时候不让手头的防御部队去防御,而是选择放弃抵抗:</span></span></p><p nodeleaf=""><img data-imgfileid="100001915" class="rich_pages wxw-img" data-ratio="0.05925925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=28038f35&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtppEFgflxagVjDZA6zdASn7DrVYbNgl7K4KWuXnfrsokfhlI8rHwIzng%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">然后转移石矿</span></span></p><p nodeleaf=""><img data-imgfileid="100001914" class="rich_pages wxw-img" data-ratio="0.5231481481481481" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=5cde6dc6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpfM0HKsYJ138K1EaudpvINIBQicUDEvy4iaDjDI5pL2DqLgJCFMLzzTiaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而claude乘胜追击</span></span></p><p nodeleaf=""><img data-imgfileid="100001917" class="rich_pages wxw-img" data-ratio="0.16111111111111112" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=bc7feb9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpP3Aa9ic4m898JR8y4T7WB7Z9DYmAicATQEUJM45bKPDUneO3gXHzl5yg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">claude在城市里面肆无忌惮的攻击</span></span></p><p nodeleaf=""><img data-imgfileid="100001921" class="rich_pages wxw-img" data-ratio="0.5657407407407408" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=e7c9707b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpoWyUZ6ZlGRcFnLdDaOXzHiakYAXUqYZQSNiblxdFNLuCUmicrxPvkiaHtA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">原来他是想城堡建造完才进行反击</span></span></p><p nodeleaf=""><img data-imgfileid="100001918" class="rich_pages wxw-img" data-ratio="0.1685185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=72b99e09&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpSWe4dL5g4CjribP6v7loJVsYEzcucrQlpsgppPrRKZqVN3mDsOaAYvQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而这个时候GLM的城堡建造起来了</span></span></p><p nodeleaf=""><img data-imgfileid="100001920" class="rich_pages wxw-img" data-ratio="0.4962962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=709b7d4c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpDK4YOkYxKd9CscIqUlYiciaFDicniaGgfOObIToZwia3nRcP8DvxQ3CGMeg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">GLM进行了第一波反击</span></span></p><p nodeleaf=""><img data-imgfileid="100001919" class="rich_pages wxw-img" data-ratio="0.2861111111111111" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=97d663ec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpAkpWCZEcKzSMREZhH3xHKbfeSzrOD7LnWrf1YZ0HzvxA48RUH80LhQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">双方进行了混战</span></span></p><p nodeleaf=""><img data-imgfileid="100001940" class="rich_pages wxw-img" data-ratio="0.5138888888888888" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=441b16ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpvpxcTJEMfQ3sQ5ibYlniaFRibfoGH5YZtXUD9yhG8hyzMJ0P23tpn7tYg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">最后GLM胜利了(所以为什么不早点来??)</span></span></p><p nodeleaf=""><img data-imgfileid="100001923" class="rich_pages wxw-img" data-ratio="0.40925925925925927" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=7a8ee278&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpGiblo5Ts5UBibg4mxeWgXZN6bia2fkbfL1zaDibrdZQWJ4VHclgMTQnhLQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">这一波由于GLM的绥靖政策,自己城镇中心已经没了,并且经济损失过半</span></span></p><p nodeleaf=""><img data-imgfileid="100001941" class="rich_pages wxw-img" data-ratio="0.47129629629629627" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=7b8177a4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpeicPVicKaX2Rz9wmpxTxOibUtr3SlnG8nMcEKUiajPiaGuyNmMJWXx0WddA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而GLM的军师认为,已经毫无胜算,准备最后一搏</span></span></p><p nodeleaf=""><img data-imgfileid="100001922" class="rich_pages wxw-img" data-ratio="0.18791946308724833" data-type="png" data-w="745" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=2888cd39&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp6WibEZ8fBq5jEWterJaQUnsDAhyp87RMOzFVYeCMibOr6I9zh1pwAdAQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">于是他把所有的部队分成了两拨,一波直接冲城镇中心</span></span></p><p nodeleaf=""><img data-imgfileid="100001925" class="rich_pages wxw-img" data-ratio="0.4888888888888889" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=a86e34f8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp3PBjw4NnhaQOxm494ngzlHBfbnWW7L9AOxgbFIXwZIFfwpGycwUqWQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而另外一波断农民金矿</span></span></p><p nodeleaf=""><img data-imgfileid="100001929" class="rich_pages wxw-img" data-ratio="0.4425925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=7142c3c8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpSjmgo4ZBcbhXcmFbKR6qZ04KluCQoWbjD1RvibRDE6tamAVew65CWlg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而claude其实还有预备队,因为claude计划了三波攻击，刚刚攻击GLM的其实是第一波</span></span></p><p nodeleaf=""><img data-imgfileid="100001928" class="rich_pages wxw-img" data-ratio="0.2898148148148148" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=e9e41bd9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpKlWzEwTu4rpwpDrd2oyVsSdhYXe4Sr68RUo2dEJmZNcOJr1CKSibC7Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">毫无意外,这一波没了</span></span></p><p nodeleaf=""><img data-imgfileid="100001931" class="rich_pages wxw-img" data-ratio="0.4777777777777778" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=7b4a3c67&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpiaPNQdoN2l0plCCtTibaVBvDHdgIGibq5ANI9WDsOnxkPR6aq6icpic9gVw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而GLM选择重新建造城镇中心</span></span></p><p nodeleaf=""><img data-imgfileid="100001930" class="rich_pages wxw-img" data-ratio="0.46944444444444444" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=f97a7808&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpc5bbMNxRp0fRqsY6krlnM9TjmDLfs6hnjyH1pEndQvZYvohElDlgLw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而来不及了,claude准备了冲车+投矛手</span></span></p><p nodeleaf=""><img data-imgfileid="100001927" class="rich_pages wxw-img" data-ratio="0.40370370370370373" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=6eff58d8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpNbZOHEguFkkAjZSpIVeWURScm8tkzKZH6Pn9ufviccvSjrQMD88BeNQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p nodeleaf=""><img data-imgfileid="100001933" class="rich_pages wxw-img" data-ratio="0.5578947368421052" data-type="png" data-w="475" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=8d81f1f7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtptQ8T2k3xAuAN7XicVPjHzoedHDIK5gD33aGvf4f9tVDCWJcB28sJ03A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p nodeleaf=""><img data-imgfileid="100001932" class="rich_pages wxw-img" data-ratio="0.4601851851851852" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=f8dde6af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpK6W7W8qewrD77nIgDe766aoiaibEauicWjBy91z2HJPckyUYNGpOOwDxw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">GLM刚刚莽的那一波,自己的部队完全没了,现在只有两三个长矛兵</span></span><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">两辆冲车率先冲入</span></span></p><p nodeleaf=""><img data-imgfileid="100001935" class="rich_pages wxw-img" data-ratio="0.687962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=6978e759&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpJ2H9tGEdaia8r96F2pPqGbkO5ksT6ZU9XnBGEmtfRhXLW8CQ8orfic8g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而GLM也没坐以待毙,等那些人接近城堡，在城堡的掩护下，用两个长矛兵反击</span></span></p><p nodeleaf=""><img data-imgfileid="100001934" class="rich_pages wxw-img" data-ratio="0.6842592592592592" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=1fc23dba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpxLiacv1QFodRIBicU90RB5Ood1XFcdguwkFZGJz4dgVYQu2sateFQVfw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而投矛手全部暴露在城堡射程下，一大半都被射死</span></span></p><p nodeleaf=""><img data-imgfileid="100001936" class="rich_pages wxw-img" data-ratio="0.7055555555555556" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=290f136e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpboXhPuaZXfnNFOuSgVRvQU6SAia86nOiaicRolN1taMmfypobhBhIE2ibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">claude准备撤退，然后准备来一波更大的</span></span></p><p nodeleaf=""><img data-imgfileid="100001938" class="rich_pages wxw-img" data-ratio="0.6324074074074074" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=18e8591c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpM6DiaaT6273ppKnS9f1JhkUG4XjZT0D2qkxAUnjFrJEiaDZpZGGic62MQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而GLM认为自己没有任何抵抗能力了,投降</span></span></p><p nodeleaf=""><img data-imgfileid="100001937" class="rich_pages wxw-img" data-ratio="0.6166666666666667" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" src="https://wechat2rss.xlab.app/img-proxy/?k=459d7925&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpFgJwmnqWGmVSqNriau0oQzSJxtFKIBQWFnJrjEcpBFBRUoLnO9p2A8w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">赛后总结:</span></span><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">claude对战场处理能力非常好，长远规划非常精彩，包括攻击节奏</span></span><span leaf=""><br/></span><span style="color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;"><span leaf="">而GLM关键输的节点是，自己的矿场被攻击没有第一时间派兵迎战而是选择放弃战略要地，跑路继续发展经济。直到城堡建造好才反击，浪费了大量时间，导致自己的基地被干烂。虽然进行了漂亮的反击并且孤注一掷，但是大势已去。claude赢得比赛只是时间问题</span></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">4v4 国产AI大战国外AI!</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">由于经费问题,不会有4v4中外AI大战了,虽然我也很想举办,但是目前看没几万是举办不了,原因是:</span><span leaf=""><br/></span><span leaf="">这一局claude花了700人民币</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001942" class="rich_pages wxw-img" data-ratio="0.2706422018348624" data-type="png" data-w="218" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d383e03c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpYgibKuwAjRT3Rgxcy5K5kLDa1pekxK9DcVzO8kAPia9gXtibYEdApbhjg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">GLM花了200多:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001943" class="rich_pages wxw-img" data-ratio="0.11481481481481481" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c2148196&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtphgNHTJF5drib1MPtNcff5U5osTLz920ZxRSjF31acvicwpzlTJlZPDvQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">实在是支撑不起4v4的巨型战斗了!</span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">技术细节</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这次整活真的是让我力竭了!原因是我基本国庆不休息的在逆向游戏并且写SDK,有非常多非常多的新发现和新技术,很可惜这里写不下,我们写一些基本的吧</span><span leaf=""><br/></span><span leaf="">这次逆向光笔记写了快几千个字了, 包含了大量算法，解密，反作弊</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001945" class="rich_pages wxw-img" data-ratio="0.5138888888888888" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=244a8ccf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpU615grY6kIjMoegySEwnyqJFPJK7sibSoWhIonibSyp4Gexu7K1y4xKg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">为了实现功能,我写了700多行的sdk,结合remote_call模块这样我就能跟回家一样调用游戏的功能了.</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001944" class="rich_pages wxw-img" data-ratio="1.6985294117647058" data-type="png" data-w="680" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=ca89c96d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpqKRWkeV4DaqpibH8EibRH69kH9fGAiayEgg0WrQL3TIQvuMLfBqicFU1LA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这样就能跟回家一样调用游戏引擎:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001946" class="rich_pages wxw-img" data-ratio="1.1230314960629921" data-type="png" data-w="1016" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9348e9ca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpcDmcdk0uNbCpoIMNvpkZDT3heSFANG8qcic7vyAY7UD908c7czO4Sjw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">基本游戏引擎</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果我们要做AI的MCP,我们需要完整了解这个引擎.这边由于是偏娱乐的第一篇,我们就不详细介绍了,只是简单介绍一下.</span><span leaf=""><br/></span><span leaf="">帝国时代2的总结构有几个</span><span leaf=""><br/></span><span leaf="">avgamescreen -&gt; 负责UI层的东西,点击什么</span><span leaf=""><br/></span><span leaf="">PathingSystem-&gt; 核心层,里面有世界的信息</span><span leaf=""><br/></span><span leaf="">通过ida+reclass我们很容易的就定位到他了(通过搜索”World: end_of_new_game”字符串)</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001949" class="rich_pages wxw-img" data-ratio="0.4546296296296296" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=7ba4c628&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpbJX4FuVEpiaIrJVprL9LZLGnBSvjVuiaUNfdP9f6kEGVlajfVtVDFX7Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">在PathingSystem下面有我们关键信息:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001951" class="rich_pages wxw-img" data-ratio="0.6472222222222223" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=1b4a2259&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpEuoeGn5eNXjZaJ2mKsEalNvbUQQddIBYCclXaWMRiaH7V0sib8mMPG8Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">AVBaseWorld-&gt;</span><span leaf=""><br/></span><span leaf="">    AvCommandBase</span><span leaf=""><br/></span><span leaf="">    PlayerList-&gt;AVWordBasePlayer -&gt;我们玩家的信息</span><span leaf=""><br/></span><span leaf="">    AVMapPtr</span><span leaf=""><br/></span><span leaf="">        -&gt;staticObjects</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">玩家playerlist:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001950" class="rich_pages wxw-img" data-ratio="0.4935185185185185" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=49ea5aa9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpvtQ1Hpse4iapN8zJofATUzxcprKicuKHgx3lqmic2PnbGmcjeC72sIBuA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">avgamescreen有我们需要的摄像机,有了这个我们就能做world2screen操作</span><span leaf=""><br/></span><span leaf="">而里面的”玩家”实际上是多个class的合体</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001947" class="rich_pages wxw-img" data-ratio="0.1175925925925926" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=4b1b4a4d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpjFzuelXTeulicz2eia6rL3UKspZSSnneYmWl3GNaFE6ydkhCJ6ZJDnCg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">比如一个村民:</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">AVTRIBE_Combat_Object : AVRGE_Combat_Object : AVRGE_Action_Object : AVRGE_Moving_Object : AVGRGE_Animated_Object : AVRGE_Static_Object</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">帝国时代2部分数据是加密的,微软做了混淆,不过他们犯了一个错误,混淆不能与0数据混淆,否则出来就是密钥了,出来密钥后,我们可以ida直接搜定位从哪来的,并且知道解密方式:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001948" class="rich_pages wxw-img" data-ratio="0.3277777777777778" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d67d66be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpkFOyBcad6GYrWW0sibSnSEm7XXxodatYJsibJtwK8lV652kVlDXqNhpw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">搜索后,让AI根据算法,写一个逆向的</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf=""><a class="wx_topic_link" topic-id="mge5g9pc-4me1g9" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;cstdint&gt;</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mge5g9pc-brnqe5" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;stdexcept&gt;</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mge5g9pc-1cgaiq" style="color: #576B95 !important;" data-topic="1">#include</a> &lt;vector&gt;</span><span leaf=""><br/></span><span leaf="">// 解密函数</span><span leaf=""><br/></span><span leaf="">std::vector&lt;uint64_t&gt; decrypt_pointer(uint64_t encrypted_value, uint64_t multiplier) {</span><span leaf=""><br/></span><span leaf="">    std::vector&lt;uint64_t&gt; possible_results;</span><span leaf=""><br/></span><span leaf="">    // 默认情况（原始值能被5整除）</span><span leaf=""><br/></span><span leaf="">    uint64_t decrypted_default = encrypted_value - 0x7987582189A6A79A;</span><span leaf=""><br/></span><span leaf="">    possible_results.push_back(decrypted_default);</span><span leaf=""><br/></span><span leaf="">    // 情况1（原始值 mod 5 == 1）</span><span leaf=""><br/></span><span leaf="">    // 根据乘数确定不同的常量</span><span leaf=""><br/></span><span leaf="">    uint64_t case1_const;</span><span leaf=""><br/></span><span leaf="">    switch(multiplier) {</span><span leaf=""><br/></span><span leaf="">        case 1345: case1_const = 0x54DD3E6DE5EA4C5D; break;</span><span leaf=""><br/></span><span leaf="">        case 1368: case1_const = 0x54DD3E6DE5EA4C74; break;</span><span leaf=""><br/></span><span leaf="">        case 1386: case1_const = 0x54DD3E6DE5EA4C86; break;</span><span leaf=""><br/></span><span leaf="">        case 1387: case1_const = 0x54DD3E6DE5EA4C87; break;</span><span leaf=""><br/></span><span leaf="">        case 1388: case1_const = 0x54DD3E6DE5EA4C88; break;</span><span leaf=""><br/></span><span leaf="">        default: throw std::runtime_error(&#34;Unknown multiplier&#34;);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 检查是否能被0x5314BB974EE0274A整除</span><span leaf=""><br/></span><span leaf="">    if ((encrypted_value - case1_const) % 0x5314BB974EE0274A == 0) {</span><span leaf=""><br/></span><span leaf="">        uint64_t decrypted_case1 = (encrypted_value - case1_const) / 0x5314BB974EE0274A;</span><span leaf=""><br/></span><span leaf="">        possible_results.push_back(decrypted_case1);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 情况2（原始值 mod 5 == 2）</span><span leaf=""><br/></span><span leaf="">    uint64_t case2_term = encrypted_value + 0x6C5EAB60B426DD28;</span><span leaf=""><br/></span><span leaf="">    if (case2_term % multiplier == 0) {</span><span leaf=""><br/></span><span leaf="">        uint64_t divisor = case2_term / multiplier;</span><span leaf=""><br/></span><span leaf="">        if (divisor != 0) {</span><span leaf=""><br/></span><span leaf="">            uint64_t decrypted_case2 = 0xE7C353CF2DBBE2F2 / divisor;</span><span leaf=""><br/></span><span leaf="">            possible_results.push_back(decrypted_case2);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 情况3（原始值 mod 5 == 3）</span><span leaf=""><br/></span><span leaf="">    uint64_t case3_term = encrypted_value + 0x2B3719EF44DE99FF;</span><span leaf=""><br/></span><span leaf="">    if (case3_term % 0xC397D46924EFACCD == 0) {</span><span leaf=""><br/></span><span leaf="">        uint64_t quotient = case3_term / 0xC397D46924EFACCD;</span><span leaf=""><br/></span><span leaf="">        uint64_t decrypted_case3 = quotient * multiplier;</span><span leaf=""><br/></span><span leaf="">        possible_results.push_back(decrypted_case3);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 情况4（原始值 mod 5 == 4）</span><span leaf=""><br/></span><span leaf="">    // 根据乘数确定不同的解密方法</span><span leaf=""><br/></span><span leaf="">    if (multiplier == 1368) {</span><span leaf=""><br/></span><span leaf="">        // 对于1368，使用模0x558</span><span leaf=""><br/></span><span leaf="">        uint64_t target = (encrypted_value + 0x726CEB9596408004) % 0x558;</span><span leaf=""><br/></span><span leaf="">        // 寻找满足 (0x5E9DF56934CB6EC7 * value) % 0x558 == target 的value</span><span leaf=""><br/></span><span leaf="">        for (uint64_t value = 0; value &lt; 0x558; ++value) {</span><span leaf=""><br/></span><span leaf="">            if ((0x5E9DF56934CB6EC7 * value) % 0x558 == target) {</span><span leaf=""><br/></span><span leaf="">                possible_results.push_back(value);</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    } </span><span leaf=""><br/></span><span leaf="">    else if (multiplier == 1386) {</span><span leaf=""><br/></span><span leaf="">        // 对于1386，使用模0x56A</span><span leaf=""><br/></span><span leaf="">        uint64_t target = (encrypted_value + 0x726CEB9596408004) % 0x56A;</span><span leaf=""><br/></span><span leaf="">        // 寻找满足 (0x5E9DF56934CB6EC7 * value) % 0x56A == target 的value</span><span leaf=""><br/></span><span leaf="">        for (uint64_t value = 0; value &lt; 0x56A; ++value) {</span><span leaf=""><br/></span><span leaf="">            if ((0x5E9DF56934CB6EC7 * value) % 0x56A == target) {</span><span leaf=""><br/></span><span leaf="">                possible_results.push_back(value);</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    else {</span><span leaf=""><br/></span><span leaf="">        // 对于其他乘数（1345, 1387, 1388），使用更复杂的解密方法</span><span leaf=""><br/></span><span leaf="">        // 这里简化处理，实际应用中可能需要更精确的逆向计算</span><span leaf=""><br/></span><span leaf="">        uint64_t base = encrypted_value + 0x726CEB9596408004;</span><span leaf=""><br/></span><span leaf="">        // 尝试一些可能的值范围</span><span leaf=""><br/></span><span leaf="">        for (uint64_t value = base - 1000; value &lt;= base + 1000; ++value) {</span><span leaf=""><br/></span><span leaf="">            // 简化的验证 - 实际应用中应使用完整的逆向计算</span><span leaf=""><br/></span><span leaf="">            if (value % 5 == 4) { // 情况4的条件</span><span leaf=""><br/></span><span leaf="">                possible_results.push_back(value);</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    return possible_results;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">// 辅助函数：从对象中解密指针</span><span leaf=""><br/></span><span leaf="">std::vector&lt;uint64_t&gt; decrypt_object_pointers(uint8_t* object_base) {</span><span leaf=""><br/></span><span leaf="">    std::vector&lt;uint64_t&gt; decrypted_pointers;</span><span leaf=""><br/></span><span leaf="">    // 第一组数据：偏移量16-176，使用乘数1345</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 20; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 16 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1345);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]); // 取第一个可能的结果</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第二组数据：偏移量184-344，使用乘数1345</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 20; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 184 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1345);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第三组数据：偏移量560-736，使用乘数1368</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 22; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 560 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1368);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第四组数据：偏移量744-920，使用乘数1368</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 22; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 744 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1368);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第五组数据：偏移量968-1048，使用乘数1386</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 10; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 968 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1386);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第六组数据：偏移量1056-1136，使用乘数1386</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 10; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 1056 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1386);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第七组数据：偏移量1136-1264，使用乘数1387</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 16; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 1136 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1387);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第八组数据：偏移量1272-1400，使用乘数1387</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 16; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 1272 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1387);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第九组数据：偏移量1400-1520，使用乘数1388</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 15; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 1400 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1388);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 第十组数据：偏移量1528-1648，使用乘数1388</span><span leaf=""><br/></span><span leaf="">    for (int i = 0; i &lt; 15; ++i) {</span><span leaf=""><br/></span><span leaf="">        uint64_t encrypted_value = *reinterpret_cast&lt;uint64_t*&gt;(object_base + 1528 + i * 16);</span><span leaf=""><br/></span><span leaf="">        auto results = decrypt_pointer(encrypted_value, 1388);</span><span leaf=""><br/></span><span leaf="">        if (!results.empty()) {</span><span leaf=""><br/></span><span leaf="">            decrypted_pointers.push_back(results[0]);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    return decrypted_pointers;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">// 定义加密组结构体</span><span leaf=""><br/></span><span leaf="">struct EncryptedGroup {</span><span leaf=""><br/></span><span leaf="">    uint64_t start_offset;  // 组起始偏移量</span><span leaf=""><br/></span><span leaf="">    uint64_t end_offset;    // 组结束偏移量</span><span leaf=""><br/></span><span leaf="">    uint64_t multiplier;    // 该组使用的乘数</span><span leaf=""><br/></span><span leaf="">    const char* description; // 组描述（可选）</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span leaf="">// 获取指针位置对应的乘数</span><span leaf=""><br/></span><span leaf="">uint64_t get_multiplier_at_offset(uint64_t base, uint64_t offset) {</span><span leaf=""><br/></span><span leaf="">    // 定义所有加密组</span><span leaf=""><br/></span><span leaf="">    const std::vector&lt;EncryptedGroup&gt; groups = {</span><span leaf=""><br/></span><span leaf="">        // 第一组：偏移量16-175，乘数1345</span><span leaf=""><br/></span><span leaf="">        {16, 175, 1345, &#34;Group 1 (offsets 16-175)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第二组：偏移量184-343，乘数1345</span><span leaf=""><br/></span><span leaf="">        {184, 343, 1345, &#34;Group 2 (offsets 184-343)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第三组：偏移量560-735，乘数1368</span><span leaf=""><br/></span><span leaf="">        {560, 735, 1368, &#34;Group 3 (offsets 560-735)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第四组：偏移量744-919，乘数1368</span><span leaf=""><br/></span><span leaf="">        {744, 919, 1368, &#34;Group 4 (offsets 744-919)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第五组：偏移量968-1047，乘数1386</span><span leaf=""><br/></span><span leaf="">        {968, 1047, 1386, &#34;Group 5 (offsets 968-1047)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第六组：偏移量1056-1135，乘数1386</span><span leaf=""><br/></span><span leaf="">        {1056, 1135, 1386, &#34;Group 6 (offsets 1056-1135)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第七组：偏移量1136-1263，乘数1387</span><span leaf=""><br/></span><span leaf="">        {1136, 1263, 1387, &#34;Group 7 (offsets 1136-1263)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第八组：偏移量1272-1399，乘数1387</span><span leaf=""><br/></span><span leaf="">        {1272, 1399, 1387, &#34;Group 8 (offsets 1272-1399)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第九组：偏移量1400-1519，乘数1388</span><span leaf=""><br/></span><span leaf="">        {1400, 1519, 1388, &#34;Group 9 (offsets 1400-1519)&#34;},</span><span leaf=""><br/></span><span leaf="">        // 第十组：偏移量1528-1647，乘数1388</span><span leaf=""><br/></span><span leaf="">        {1528, 1647, 1388, &#34;Group 10 (offsets 1528-1647)&#34;}</span><span leaf=""><br/></span><span leaf="">    };</span><span leaf=""><br/></span><span leaf="">    // 检查特殊位置（不使用乘数的位置）</span><span leaf=""><br/></span><span leaf="">    if (offset == 1520) {</span><span leaf=""><br/></span><span leaf="">        // 偏移量1520使用异或和加法加密</span><span leaf=""><br/></span><span leaf="">        return 0xFFFFFFFFFFFFFFFE; // 特殊标记1</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    if (offset == 1264) {</span><span leaf=""><br/></span><span leaf="">        // 偏移量1264使用加法加密</span><span leaf=""><br/></span><span leaf="">        return 0xFFFFFFFFFFFFFFFD; // 特殊标记2</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 检查偏移量是否在任何加密组内</span><span leaf=""><br/></span><span leaf="">    for (const auto&amp; group : groups) {</span><span leaf=""><br/></span><span leaf="">        if (offset &gt;= group.start_offset &amp;&amp; offset &lt;= group.end_offset) {</span><span leaf=""><br/></span><span leaf="">            // 检查偏移量是否是8的倍数（指针应该对齐到8字节）</span><span leaf=""><br/></span><span leaf="">            if ((offset - group.start_offset) % 8 != 0) {</span><span leaf=""><br/></span><span leaf="">                throw std::runtime_error(&#34;Offset not aligned to 8-byte boundary within group&#34;);</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">            return group.multiplier;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    // 如果不在任何加密组内，返回0表示未加密</span><span leaf=""><br/></span><span leaf="">    return 0;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">// 获取对象中所有加密位置的乘数信息</span><span leaf=""><br/></span><span leaf="">std::vector&lt;std::pair&lt;uint64_t, uint64_t&gt;&gt; get_all_encrypted_offsets(uint64_t base) {</span><span leaf=""><br/></span><span leaf="">    std::vector&lt;std::pair&lt;uint64_t, uint64_t&gt;&gt; result;</span><span leaf=""><br/></span><span leaf="">    // 定义所有加密组</span><span leaf=""><br/></span><span leaf="">    const std::vector&lt;EncryptedGroup&gt; groups = {</span><span leaf=""><br/></span><span leaf="">        {16, 175, 1345, &#34;Group 1&#34;},</span><span leaf=""><br/></span><span leaf="">        {184, 343, 1345, &#34;Group 2&#34;},</span><span leaf=""><br/></span><span leaf="">        {560, 735, 1368, &#34;Group 3&#34;},</span><span leaf=""><br/></span><span leaf="">        {744, 919, 1368, &#34;Group 4&#34;},</span><span leaf=""><br/></span><span leaf="">        {968, 1047, 1386, &#34;Group 5&#34;},</span><span leaf=""><br/></span><span leaf="">        {1056, 1135, 1386, &#34;Group 6&#34;},</span><span leaf=""><br/></span><span leaf="">        {1136, 1263, 1387, &#34;Group 7&#34;},</span><span leaf=""><br/></span><span leaf="">        {1272, 1399, 1387, &#34;Group 8&#34;},</span><span leaf=""><br/></span><span leaf="">        {1400, 1519, 1388, &#34;Group 9&#34;},</span><span leaf=""><br/></span><span leaf="">        {1528, 1647, 1388, &#34;Group 10&#34;}</span><span leaf=""><br/></span><span leaf="">    };</span><span leaf=""><br/></span><span leaf="">    // 添加特殊位置</span><span leaf=""><br/></span><span leaf="">    result.emplace_back(1520, 0xFFFFFFFFFFFFFFFE);</span><span leaf=""><br/></span><span leaf="">    result.emplace_back(1264, 0xFFFFFFFFFFFFFFFD);</span><span leaf=""><br/></span><span leaf="">    // 添加所有加密组内的位置</span><span leaf=""><br/></span><span leaf="">    for (const auto&amp; group : groups) {</span><span leaf=""><br/></span><span leaf="">        for (uint64_t offset = group.start_offset; offset &lt;= group.end_offset; offset += 8) {</span><span leaf=""><br/></span><span leaf="">            result.emplace_back(offset, group.multiplier);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    return result;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">// 打印对象中所有加密位置的乘数信息</span><span leaf=""><br/></span><span leaf="">void print_encrypted_offsets_info(uint64_t base) {</span><span leaf=""><br/></span><span leaf="">    auto encrypted_offsets = get_all_encrypted_offsets(base);</span><span leaf=""><br/></span><span leaf="">    printf(&#34;Encrypted offsets in object at base 0x%llX:\n&#34;, base);</span><span leaf=""><br/></span><span leaf="">    printf(&#34;Offset\tMultiplier\tDescription\n&#34;);</span><span leaf=""><br/></span><span leaf="">    printf(&#34;------\t----------\t-----------\n&#34;);</span><span leaf=""><br/></span><span leaf="">    for (const auto&amp; entry : encrypted_offsets) {</span><span leaf=""><br/></span><span leaf="">        uint64_t offset = entry.first;</span><span leaf=""><br/></span><span leaf="">        uint64_t multiplier = entry.second;</span><span leaf=""><br/></span><span leaf="">        if (multiplier == 0xFFFFFFFFFFFFFFFE) {</span><span leaf=""><br/></span><span leaf="">            printf(&#34;0x%llX\tSpecial\t\tXOR + ADD encryption\n&#34;, offset);</span><span leaf=""><br/></span><span leaf="">        } else if (multiplier == 0xFFFFFFFFFFFFFFFD) {</span><span leaf=""><br/></span><span leaf="">            printf(&#34;0x%llX\tSpecial\t\tADD encryption\n&#34;, offset);</span><span leaf=""><br/></span><span leaf="">        } else if (multiplier == 0) {</span><span leaf=""><br/></span><span leaf="">            printf(&#34;0x%llX\t0\t\tNot encrypted\n&#34;, offset);</span><span leaf=""><br/></span><span leaf="">        } else {</span><span leaf=""><br/></span><span leaf="">            printf(&#34;0x%llX\t%llu\t\tStandard encryption\n&#34;, offset, multiplier);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">int main(){</span><span leaf=""><br/></span><span leaf="">uint64_t base = 0x7ff7c06b0000; // 对象基地址</span><span leaf=""><br/></span><span leaf="">print_encrypted_offsets_info(base);</span><span leaf=""><br/></span><span leaf="">auto decrypt_test =  decrypt_pointer(0x4EF2932AD180DD26, 1345);</span><span leaf=""><br/></span><span leaf="">    printf(&#34;decrypt_test: %llx \n&#34;,decrypt_test[0]);</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-imgfileid="100001952" class="rich_pages wxw-img" data-ratio="1.2038567493112948" data-type="png" data-w="726" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=cea4f9fd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpicCaCOnbGNLVIztnDpFcf9Mb4ibo7J8wNFFgakyicZmjgicEuGicu4emo6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">然后解密一下,当然其他不同的class加密方法不同,但是结果都一样:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001953" class="rich_pages wxw-img" data-ratio="1.0266666666666666" data-type="png" data-w="975" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=200ca77c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpZoOcP5JMApCk6IFO3tONsRaFySrRMtibs29uDhXQvcWsW8YMgJeUFbw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">帝国时代2反作弊:</span><span leaf=""><br/></span><span leaf="">如果你挂了CE或者其他debuger,他会提示</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001954" class="rich_pages wxw-img" data-ratio="0.6614457831325301" data-type="png" data-w="830" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=86d6f42e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpD7jCZMdfOAVwrOsHJfmJMA0iabfjrlnprZzSpW3vZ4hzl4FRsj199wg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这是因为它使用isdebug和veh做检测</span><span leaf=""><br/></span><span leaf="">定位后patch掉就行</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">__int64 __fastcall isWecheating(__int64 a1)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">  return *(unsigned __int8 *)(a1 + 0x698);</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">搜索</span><span leaf=""><br/></span><span leaf="">IDS_TAMPERING_DETECTED_MESSAG</span></code></pre><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf=""><br/></span><span leaf="">还有一个暗装:</span><span leaf=""><br/></span><span leaf="">aoe2de_s.exe + 0xA39668</span><span leaf=""><br/></span><span leaf="">_QWORD *__fastcall sub_7FF63BB7BEC0(__int64 a1, _QWORD *a2)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">  struct _Mtx_internal_imp_t *v4; // rbx</span><span leaf=""><br/></span><span leaf="">  int v5; // eax</span><span leaf=""><br/></span><span leaf="">  __int64 v6; // r8</span><span leaf=""><br/></span><span leaf="">  unsigned __int64 v7; // r9</span><span leaf=""><br/></span><span leaf="">  *a2 = 0i64;</span><span leaf=""><br/></span><span leaf="">  v4 = (struct _Mtx_internal_imp_t *)(a1 + 9344);</span><span leaf=""><br/></span><span leaf="">  v5 = Mtx_lock((_Mtx_t)(a1 + 9344));</span><span leaf=""><br/></span><span leaf="">  if ( v5 )</span><span leaf=""><br/></span><span leaf="">  {</span><span leaf=""><br/></span><span leaf="">    std::_Throw_C_error(v5);</span><span leaf=""><br/></span><span leaf="">    JUMPOUT(0x7FF63BB7BF78i64);</span><span leaf=""><br/></span><span leaf="">  }</span><span leaf=""><br/></span><span leaf="">  v6 = *(_QWORD *)(a1 + 9336);</span><span leaf=""><br/></span><span leaf="">  if ( v6 )</span><span leaf=""><br/></span><span leaf="">  {</span><span leaf=""><br/></span><span leaf="">    v7 = *(_QWORD *)(a1 + 9328);</span><span leaf=""><br/></span><span leaf="">    *a2 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 9312) + 8 * ((v7 &gt;&gt; 1) &amp; (*(_QWORD *)(a1 + 9320) - 1i64)))</span><span leaf=""><br/></span><span leaf="">                    + 8 * (v7 &amp; 1));</span><span leaf=""><br/></span><span leaf="">    *(_QWORD *)(a1 + 9336) = v6 - 1;</span><span leaf=""><br/></span><span leaf="">    if ( v6 == 1 )</span><span leaf=""><br/></span><span leaf="">      *(_QWORD *)(a1 + 9328) = 0i64;</span><span leaf=""><br/></span><span leaf="">    else</span><span leaf=""><br/></span><span leaf="">      *(_QWORD *)(a1 + 9328) = v7 + 1;</span><span leaf=""><br/></span><span leaf="">  }</span><span leaf=""><br/></span><span leaf="">  Mtx_unlock_0(v4);</span><span leaf=""><br/></span><span leaf="">  return a2;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">弹信息框的地址是</span><span leaf=""><br/></span><span leaf="">7FF63B4B2AA0 - 0x7FF63AC70000 = 842AA0</span><span leaf=""><br/></span><span leaf="">aoe2de_s.exe + 0x842AA0</span><span leaf=""><br/></span><span leaf="">hook后看来源</span><span leaf=""><br/></span><span leaf="">0:306&gt; kb</span><span leaf=""><br/></span><span leaf=""> # RetAddr               : Args to Child                                                           : Call Site</span><span leaf=""><br/></span><span leaf="">00 00007ff7`c10ec93b     : e1c096a0`0e29052d e1c096a0`0e29052d e1c096a0`0e29052d 00000230`c85d43a0 : AoE2DE_s+0x842aa0</span><span leaf=""><br/></span><span leaf="">01 00007ff7`c10daeff     : 00000000`00000000 00000000`00000000 00000230`61a2e1f0 00000000`00000003 : AoE2DE_s+0xa3c93b</span><span leaf=""><br/></span><span leaf="">02 00007ffd`45459363     : 00000230`460ae850 00000000`00000000 00000000`00000000 00000000`00000000 : AoE2DE_s+0xa2aeff</span><span leaf=""><br/></span><span leaf="">03 00007ffd`464426ad     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ucrtbase!thread_start&lt;unsigned int (__cdecl*)(void *),1&gt;+0x93</span><span leaf=""><br/></span><span leaf="">04 00007ffd`4796a9f8     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x1d</span><span leaf=""><br/></span><span leaf="">05 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x28</span><span leaf=""><br/></span><span leaf="">0:323&gt; kb</span><span leaf=""><br/></span><span leaf=""> # RetAddr               : Args to Child                                                           : Call Site</span><span leaf=""><br/></span><span leaf="">00 00007ff7`c1c8352b     : 00007ffd`4796a9f8 00007ff7`c3cf38c8 00000000`00000030 00007ff7`c3cf69b0 : USER32!MessageBoxW</span><span leaf=""><br/></span><span leaf="">01 00007ff7`c0ef2ac7     : ca057213`7bfa831d 00000000`ffffffff 00000230`60ad5d30 00000000`ffffffff : AoE2DE_s+0x15d352b</span><span leaf=""><br/></span><span leaf="">02 00007ff7`c10ec93b     : ca057213`7bfa831d ca057213`7bfa831d ca057213`7bfa831d 00000230`c85d43a0 : AoE2DE_s+0x842ac7</span><span leaf=""><br/></span><span leaf="">03 00007ff7`c10daeff     : 00000000`00000000 00000000`00000000 00000230`f8868840 00000000`00000003 : AoE2DE_s+0xa3c93b</span><span leaf=""><br/></span><span leaf="">04 00007ffd`45459363     : 00000230`46018fc0 00000000`00000000 00000000`00000000 00000000`00000000 : AoE2DE_s+0xa2aeff</span><span leaf=""><br/></span><span leaf="">05 00007ffd`464426ad     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ucrtbase!thread_start&lt;unsigned int (__cdecl*)(void *),1&gt;+0x93</span><span leaf=""><br/></span><span leaf="">06 00007ffd`4796a9f8     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x1d</span><span leaf=""><br/></span><span leaf="">07 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x28</span><span leaf=""><br/></span><span leaf="">__int64 __fastcall sub_7FF63BAE8380(__int64 a1)</span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">  __int64 result; // rax</span><span leaf=""><br/></span><span leaf="">  __int64 v3; // rcx</span><span leaf=""><br/></span><span leaf="">  __int64 (__fastcall ***v4)(_QWORD, __int64); // rcx</span><span leaf=""><br/></span><span leaf="">  if ( qword_7FF63F0780E8 )</span><span leaf=""><br/></span><span leaf="">    sub_7FF63BB86ED0(qword_7FF63F0780E8, 4i64);</span><span leaf=""><br/></span><span leaf="">  if ( *(_BYTE *)(a1 + 0x699) )</span><span leaf=""><br/></span><span leaf="">    sub_7FF63BB799C0(g_events);</span><span leaf=""><br/></span><span leaf="">  *(_BYTE *)(a1 + 0x699) = 1;</span><span leaf=""><br/></span><span leaf="">  result = g_events;</span><span leaf=""><br/></span><span leaf="">  v3 = *(_QWORD *)(*(_QWORD *)(g_events + 848) + 11088i64);</span><span leaf=""><br/></span><span leaf="">  if ( v3 )</span><span leaf=""><br/></span><span leaf="">    result = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v3 + 552i64))(v3);</span><span leaf=""><br/></span><span leaf="">  v4 = *(__int64 (__fastcall ****)(_QWORD, __int64))(a1 + 1136);</span><span leaf=""><br/></span><span leaf="">  *(_QWORD *)(a1 + 1136) = 0i64;</span><span leaf=""><br/></span><span leaf="">  if ( v4 )</span><span leaf=""><br/></span><span leaf="">    return (**v4)(v4, 1i64);</span><span leaf=""><br/></span><span leaf="">  return result;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">写入的几个地址：</span><span leaf=""><br/></span><span leaf="">0:293&gt; g</span><span leaf=""><br/></span><span leaf="">Breakpoint 4 hit</span><span leaf=""><br/></span><span leaf="">AoE2DE_s+0xa3c11f:</span><span leaf=""><br/></span><span leaf="">00007ff7`c10ec11f c681f10e000001  mov     byte ptr [rcx+0EF1h],1 ds:00000292`17f1dba1=01</span><span leaf=""><br/></span><span leaf="">0:293&gt; kb</span><span leaf=""><br/></span><span leaf=""> # RetAddr               : Args to Child                                                           : Call Site</span><span leaf=""><br/></span><span leaf="">00 00007ff7`c10ec92f     : 6d4c1d03`8609bde5 6d4c1d03`8609bde5 6d4c1d03`8609bde5 00000292`0d042b50 : AoE2DE_s+0xa3c11f</span><span leaf=""><br/></span><span leaf="">01 00007ff7`c10daeff     : 00000000`00000000 00000000`00000000 00000293`1d5f04f0 00000000`00000003 : AoE2DE_s+0xa3c92f</span><span leaf=""><br/></span><span leaf="">02 00007ffd`45459363     : 00000292`077fbfd0 00000000`00000000 00000000`00000000 00000000`00000000 : AoE2DE_s+0xa2aeff</span><span leaf=""><br/></span><span leaf="">03 00007ffd`464426ad     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ucrtbase!thread_start&lt;unsigned int (__cdecl*)(void *),1&gt;+0x93</span><span leaf=""><br/></span><span leaf="">04 00007ffd`4796a9f8     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x1d</span><span leaf=""><br/></span><span leaf="">05 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x28</span><span leaf=""><br/></span><span leaf="">call的函数是</span><span leaf=""><br/></span><span leaf="">aoe2de_s.exe + 0x501d43e</span><span leaf=""><br/></span><span leaf="">0x7FF63AC70000 + 0xa3c93b = </span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86916 - 66 66 0F1F 84 00 00000000  - nop word ptr [rax+rax+00000000]</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86920 - 48 3B 0D 91D86A01     - cmp rcx,[AoE2DE_s.exe+42341B8] { (-562597392) }</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86927 - 75 10                 - jne AoE2DE_s.exe+2B86939</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86929 - 48 C1 C1 10           - rol rcx,10 { 16 }</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B8692D - 66 F7 C1 FFFF         - test cx,FFFF { 65535 }</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86932 - 75 01                 - jne AoE2DE_s.exe+2B86935</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86934 - C3                    - ret </span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86935 - 48 C1 C9 10           - ror rcx,10 { 16 }</span><span leaf=""><br/></span><span leaf="">AoE2DE_s.exe+2B86939 - E9 C2030000           - jmp AoE2DE_s.exe+2B86D00</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">之后我们就可以顺利得到资源了.这些都不是本篇要说的内容.</span><span leaf=""><br/></span><span leaf="">为此 我做了一个简单的透视，打印出内容</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001955" class="rich_pages wxw-img" data-ratio="0.8444444444444444" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=921e443a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpPCAic0mibJbU9K9Pt4XH8zNs84rj9dOG0Fia9uIFZiceo6lJCn8ibz0C8Sw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001956" class="rich_pages wxw-img" data-ratio="0.5305555555555556" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=0a1a70ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpicBN2lI8RUD7yiaZ2xo0WKlhGT8KLAENgDmtGTEPhq9T2rwhppJhshBQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">值得注意的是,盖亚的树木和鱼和海要额外处理:</span><span leaf=""><br/></span><span leaf="">你可以看到他并不显示树木</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001960" class="rich_pages wxw-img" data-ratio="0.6" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c398494d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpicIKE4cxoPwag76GMSSlXHwAqx1ODsicZD5762sSWlPUTT2F3EIibsvKQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这是因为，这些是 地图属性,需要从另外一个表读取,非常非常大,这个折腾花了我一天时间,最后借助GPT的帮助才恍然大悟!</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001961" class="rich_pages wxw-img" data-ratio="0.5305555555555556" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=4fe78626&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpibHOeFkjnibYtpUC1M66urtF1lMe2yYLyMialHQakmSrh5NZHW9ic1iayVg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">帝国时代2内存泄漏</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">我有理由相信帝国时代2存在某种资源泄漏.原因是死亡的对象会堆积在0-0-0的区域内,不会被删除</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001959" class="rich_pages wxw-img" data-ratio="0.42592592592592593" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9c09ee8f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp0iaYBlmh9JWDBVyZZibJCGFwhpttfEhf1nAX9zcgDLpCDUGQOsVgwsPw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">据我观察到,这块内存会越来越大在一局比赛中,这可能也是为什么帝国时代2这游戏越玩越卡的原因</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">帝国时代2命令系统</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">微软九十年代的程序员,代码技术非常的硬.表现为他们要实现一个八人在线，数百个甚至是数千个单位，在10kb光猫下跑的联机对战系统！(以及反外挂)</span><span leaf=""><br/></span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">这个系统细节我会放到下期，这对我们的影响是，我们没有办法直接移动单位，或者修改资源，或者做出任何事情！只能读取</span></strong><span leaf=""><br/></span><span leaf="">这是因为，帝国时代2的网络系统是lockstep,这是一种非常离谱的方法,在2000年的时候还专门写了一篇新闻说他们是如何的困难</span><span leaf=""><br/></span><span leaf=""><a href="https://web.archive.org/web/20180719170411/https://www.gamasutra.com/view/feature/131503/1500_archers_on_a_288_network_.php?print=1" target="_blank">https://web.archive.org/web/20180719170411/https://www.gamasutra.com/view/feature/131503/1500_archers_on_a_288_network_.php?print=1</a></span><span leaf=""><br/></span><span leaf="">我非常建议搞技术的详细阅读这篇文章.即便是不是游戏行业也受益匪浅</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001958" class="rich_pages wxw-img" data-ratio="0.8324074074074074" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=91207c89&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpEZfWNrSdDibzQjl1AGERvEDGq19fHU92xfQicSlf2dMaaJNVfVo8aaIQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">简单来说,你的所有状态都会同步给其他玩家,</span><span leaf=""><br/></span><span leaf="">其他玩家会根据你的少量信息在本地进行模拟计算</span><span leaf=""><br/></span><span leaf="">计算出来的结果再在本地呈现出来</span><span leaf=""><br/></span><span leaf="">这意味着:</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">（1）所有对局看起来没多少延迟,因为大部分都是本地计算的.除非有大量丢包.</span><span leaf=""><br/></span><span leaf="">（2）你可以改资源/甚至是修改视野范围,但是其他玩家发现你的状态并不是能在他本地”模拟计算”出来的结果,所以他就会发出不同步的指令,这代表本局有人开挂。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以我们不能直接移动单位,而是寻找传说中的命令系统</span><span leaf=""><br/></span><span leaf="">命令系统寻找过程就不说了,因为是九十年代的代码,实在是过于复杂,在连续熬夜三天三夜只睡了4个小时后,说个血泪总结:</span><span leaf=""><br/></span><span leaf="">有一个函数,是命令分发的!原型是</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001957" class="rich_pages wxw-img" data-ratio="0.07962962962962963" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=6bc78d82&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpG15UEvueoJnUZKyYfZEvTNCE62kgsugsFzDZIZLCLDgMPicZUV0pSiaw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">接受的参数是</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001962" class="rich_pages wxw-img" data-ratio="0.41759259259259257" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c6156b8b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpcoHqoQNTOBsCxYrXpBYaPzrEQ99O6kctJxYWwTIVgeAmnQPOiaL08iaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">有了这个我们就能构造任意命令发送了。移动，升级时代，都是这样的</span><span leaf=""><br/></span><span leaf="">ps这个有个bug: 命令是P2P的,所以能瞎几把发,比如你选择B的玩家的单位发送命令移动或者摧毁自己都可以。不过我们的目的不是为了开外挂,是为了做MCP.所以默认我们是合法的</span><span leaf=""><br/></span><span leaf="">相关资料:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001963" class="rich_pages wxw-img" data-ratio="0.5268518518518519" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b6f6071e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp266PmZrvlB8YXEjzqEsKJ7ib9eUEXjttF0mWKZoAUHHxic0dialCvFbYg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf=""><a href="https://redrocket.club/posts/age_of_empires/" target="_blank">https://redrocket.club/posts/age_of_empires/</a></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">远程call</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">为了发命令,我设计了一个基于ALPC的远程call,一个DLL注入到帝国时代2里面,暴露ALPC接口:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001965" class="rich_pages wxw-img" data-ratio="1.0357894736842106" data-type="png" data-w="950" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=1a4a356e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpPWc3sd9YQnbKEL6bxZkk6icH8hSkzvXDrYlGKhgBgP1a9lNjKfVvHvQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">接受客户端的游戏指令并且在UI线程执行,之所以在UI线程执行,因为帝国时代2并没有多线程安全的机制,它默认所有的游戏都是UI更新来的(ps: 很多老游戏都这样,而且这玩意跟AI挂钩,自己的FPS越高,AI越聪明…)</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001967" class="rich_pages wxw-img" data-ratio="0.9824074074074074" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d247acb5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpyXEt72tmRBosMVyjfdQaDEIJlPdIZMDAJ4ELD7HCrQVK5ibJK5TW2bw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这样客户端就能轻松CALL了</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001966" class="rich_pages wxw-img" data-ratio="0.7490740740740741" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=83c37e81&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpy6smYia49mQib2SqfFn6icRLGSZiaROPRS5OUicQAtaU54Xt80ib9j7rLCbw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">结果:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001968" class="rich_pages wxw-img" data-ratio="0.35" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=722cd5f0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpB6zzOHgkjTyuuOJym9DibrSJIbsURDu1SOiaqH4MdzryxS3dOPr4HVBA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">地图系统</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">为了实现MCP,我做了一个地图系统。总所周知，帝国时代2的地图是一个XY坐标的地图，一般是320x320 650x650等等，这个地图系统，我们是不能直接for x-y去寻找对象的，因为效率太低。所以要用到另外一个算法，叫做空间哈希网格，这个算法我也不太熟悉，是AI看了帝国时代2的代码后给出的，他的主要作用是，能快速索引 某个对象周围的对象。时间复杂度只有o(1)</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001964" class="rich_pages wxw-img" data-ratio="1.0446428571428572" data-type="png" data-w="1008" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=835a426e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpouYLwrlKEMfOzLg9EMFWbwU1FWlJibjlrW5hQibcHKmO8Nhw1R780QXA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而寻路算法使用a star 不过帝国时代2自己有寻路系统，我们不需要操心（他也是A star）</span></p><pre style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: 13.118px;margin-top: 0px;margin-bottom: 1rem;overflow: auto;display: block;color: rgb(33, 37, 41);max-height: 400px;background-color: rgb(245, 245, 245);border: 1px solid rgb(204, 204, 204);padding: 0.5em;border-radius: 4px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-family: SFMono-Regular, Menlo, Monaco, Consolas, &#34;Liberation Mono&#34;, &#34;Courier New&#34;, monospace;font-size: inherit;color: inherit;word-break: normal;white-space: pre-wrap;"><span leaf="">第一部分：什么是哈希算法？</span><span leaf=""><br/></span><span leaf="">想象一下你有一个巨大的图书馆，里面有成千上万本书。如果你每次找书都从第一排第一个书架开始一本一本地找，那会非常慢。</span><span leaf=""><br/></span><span leaf="">哈希算法就是一个超级高效的“图书管理员”。它的工作方式是：</span><span leaf=""><br/></span><span leaf="">输入：你给它一个“键”，比如一本书的书名《三体》。</span><span leaf=""><br/></span><span leaf="">计算：它通过一个固定的数学公式（哈希函数）对这个书名进行计算。</span><span leaf=""><br/></span><span leaf="">输出：计算出一个固定的、通常比较短的编号，比如 5381。这个编号就是“哈希值”。</span><span leaf=""><br/></span><span leaf="">核心特点：</span><span leaf=""><br/></span><span leaf="">确定性：同样的输入（《三体》），永远会得到同样的输出（5381）。</span><span leaf=""><br/></span><span leaf="">高效性：计算速度非常快。</span><span leaf=""><br/></span><span leaf="">散列性：一个好的哈希算法会让不同的输入尽量产生不同的输出，避免“冲突”（即两本不同的书算出了同一个编号）。</span><span leaf=""><br/></span><span leaf="">在我们的图书馆例子里，这个管理员（哈希算法）会告诉你：“《三体》这本书在 5381 号书架上”。你直接去那个书架找就行了，省去了遍历整个图书馆的时间。</span><span leaf=""><br/></span><span leaf="">第二部分：什么是空间哈希网格？</span><span leaf=""><br/></span><span leaf="">现在，我们把场景从图书馆换到一个游戏世界，比如你正在玩的《帝国时代2》。地图上有成百上千个单位：农民、士兵、建筑、资源……</span><span leaf=""><br/></span><span leaf="">游戏需要 constantly （不断地）回答一个问题：“在某个单位周围，有哪些其他单位？” 例如：</span><span leaf=""><br/></span><span leaf="">一个士兵需要知道周围有没有敌人可以攻击。</span><span leaf=""><br/></span><span leaf="">一个农民需要知道附近有没有树可以砍。</span><span leaf=""><br/></span><span leaf="">一个建筑需要知道周围有没有友方单位在驻扎。</span><span leaf=""><br/></span><span leaf="">最笨的办法是让每个单位都和地图上所有其他单位都计算一次距离。如果有1000个单位，就需要计算1000 * 1000 = 1,000,000次！这会让游戏卡成幻灯片。</span><span leaf=""><br/></span><span leaf="">空间哈希网格就是一个聪明的“空间分区”方法，它把整个游戏世界划分成一个个小格子（单元格）。</span><span leaf=""><br/></span><span leaf="">它的工作原理是：</span><span leaf=""><br/></span><span leaf="">划分空间：将整个游戏地图虚拟地划分成许多大小相同的正方形格子。</span><span leaf=""><br/></span><span leaf="">分配对象：根据一个游戏单位（比如一个骑兵）的坐标 (x, y)，计算出它位于哪个格子里。例如，坐标 (155, 267) 可能位于格子 (15, 26) 中。</span><span leaf=""><br/></span><span leaf="">只检查相邻格子：当需要查找某个单位附近的其他单位时，系统只检查这个单位所在的格子以及它周围的8个格子。</span><span leaf=""><br/></span><span leaf="">举个例子：</span><span leaf=""><br/></span><span leaf="">假设地图被分成100个格子。一个士兵在格子 (5,5) 里。</span><span leaf=""><br/></span><span leaf="">笨办法：它需要和地图上所有999个其他单位计算距离。</span><span leaf=""><br/></span><span leaf="">空间哈希网格：它只需要和也在格子 (4,4), (5,4), (6,4), (4,5), (5,5), (6,5), (4,6), (5,6), (6,6) 这9个格子里的单位计算距离。</span><span leaf=""><br/></span><span leaf="">如果单位均匀分布，每个格子里大约只有10个单位，那么士兵只需要进行 9 * 10 = 90 次计算，而不是999次！效率提升了成百上千倍。</span><span leaf=""><br/></span><span leaf="">第三部分：两者如何结合？“哈希”在哪里？</span><span leaf=""><br/></span><span leaf="">现在关键问题来了：我们如何快速知道一个坐标 (x, y) 属于哪个格子？又如何快速找到某个格子里的所有单位呢？</span><span leaf=""><br/></span><span leaf="">这里就用到了 哈希算法！</span><span leaf=""><br/></span><span leaf="">步骤如下：</span><span leaf=""><br/></span><span leaf="">生成“键”：我们取一个单位的坐标 (x, y)，把它映射到对应的格子坐标 (grid_x, grid_y)。通常很简单：</span><span leaf=""><br/></span><span leaf="">grid_x = floor(x / cell_size)</span><span leaf=""><br/></span><span leaf="">grid_y = floor(y / cell_size)</span><span leaf=""><br/></span><span leaf="">（floor 是向下取整，cell_size 是每个格子的大小）</span><span leaf=""><br/></span><span leaf="">计算哈希值：我们将这个格子坐标 (grid_x, grid_y) 作为“键”，输入给一个哈希函数。</span><span leaf=""><br/></span><span leaf="">hash_key = hash_function(grid_x, grid_y)</span><span leaf=""><br/></span><span leaf="">存储和查找：系统维护一个巨大的“字典”（哈希表）。这个 hash_key 就是字典的索引。所有在同一个格子里的单位，都会被放入这个 hash_key 对应的列表里。</span><span leaf=""><br/></span><span leaf="">当我们需要查找时：</span><span leaf=""><br/></span><span leaf="">取目标的坐标，算出它的格子坐标 (grid_x, grid_y)。</span><span leaf=""><br/></span><span leaf="">用哈希函数瞬间计算出 hash_key。</span><span leaf=""><br/></span><span leaf="">直接用这个 hash_key 去字典里，瞬间找到对应格子的单位列表。</span><span leaf=""><br/></span><span leaf="">检查这个格子及周围8个格子的列表，完成碰撞检测或范围查询。</span><span leaf=""><br/></span><span leaf="">总结</span><span leaf=""><br/></span><span leaf="">哈希算法：是一个高效的“计算器”，能把任意数据（如坐标）转换成一个快速的索引号。</span><span leaf=""><br/></span><span leaf="">空间哈希网格：是一种管理大量空间对象的数据结构，通过将空间分格来极大地减少需要计算的对象数量。</span><span leaf=""><br/></span><span leaf="">把它们结合在一起：</span><span leaf=""><br/></span><span leaf="">空间哈希网格使用哈希算法，来快速地将一个空间位置（坐标）映射到一个存储单位的容器（格子）上。</span><span leaf=""><br/></span><span leaf="">这就好比：</span><span leaf=""><br/></span><span leaf="">空间哈希网格是那个划分了区域的图书馆大厅。</span><span leaf=""><br/></span><span leaf="">哈希算法是那个看一眼书名就能立刻报出书架编号的超级管理员。</span><span leaf=""><br/></span><span leaf="">你（游戏引擎） 想问“《三体》在哪？”，管理员瞬间告诉你“5381号架”，你直接过去，而不用逛遍整个大厅。</span><span leaf=""><br/></span><span leaf="">在《帝国时代2》这样的游戏中，这套机制是保证成千上万个单位能够流畅运行而不会卡顿的关键技术之一。</span></code></pre><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">反正我是不懂，不过就当是真的吧，确实有效果。 那么这样我们的MCP就有感知能力了，以下是AI感知周围的截图:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001969" class="rich_pages wxw-img" data-ratio="0.32222222222222224" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=7124c3b4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpNNPrIMuacpibQzTm3bYSdlGibZ33NlLib1ZNt8l0Z7v8Yk6RwPaibnncKQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 2rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">MCP服务端设计</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这是最关键的一部分，也是最耗费时间的部分。总的来说，我们其实有很多种让AI玩的方案，不一定是大语言模型。其实我也考虑过其他方案，不过国庆就这么多天，我也没时间实现了。方案如下</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">OneBrain ALL IN</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">决策层（有限状态机/行为树） + 命令执行层</span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">决策层 (效用AI) + 命令执行层</span></p></li></ol><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一种是，我们直接让AI参与控制决策并且直接控制各个单位移动，部署。 -这样做的比较快，本次项目用的就是这个。</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二种第三种的“决策层”这个决策层不仅仅是大语言模型，还可以是传统游戏决策树/强化学习的AI甚至是一个xgboost就行，因为它只需要发几个特定的命令: 比如农田建造在x区域。然后命令执行层用代码根据村民位置，选择最好的方案执行。 如果你读过帝国时代2的AI代码，你就会发现，帝国时代2的AI就是这样做的。他的好处是决策和执行分开，不需要太大的沉默成本。但是也是最费时间的，原因很简单，有限状态机/决策树是可枚举的，但是帝国时代2的这个RTS被开发出了上百种玩法，即便是帝国时代2的极难AI也有缺陷-比如黑暗时代封墙，黑森林围墙之类的。所以这个方案耗时耗力，考虑到我不是专业游戏开发，还是算了- 要是哪天我去做游戏的我会试试的</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第三种</span><span leaf=""><br/></span><span leaf="">不为AI定义明确的“如果-那么”规则，而是为每个可能的行动计算一个“得分”（效用值），然后选择得分最高的那个行动</span><span leaf=""><br/></span><span leaf="">比如,计算得分：</span><span leaf=""><br/></span><span leaf="">攻击的得分 = 攻击欲望 </span><em style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><span leaf="">命中率</span><span leaf=""><br/></span><span leaf="">吃药的得分 = (1 - 生命值百分比) </span></em><span leaf="">药瓶价值</span><span leaf=""><br/></span><span leaf="">找掩体的得分 = 危险程度 * 附近掩体质量</span><span leaf=""><br/></span><span leaf="">选择：比较这三个得分，执行最高的那个</span><span leaf=""><br/></span><span leaf="">这个也比较复杂，复杂不是决策层的设计而是那个命令执行层的设计。所以也pass了</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">因此我选择直接让AI控制单位这种低级粗暴的算法。因为我没多少时间，国庆后还要当牛马</span></p><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">因此我设计了17款工具,抛开别的,关键的几个是</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">incident</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">为了让AI有态势感知能力，我编写了一个incident系统，其实游戏也有incident系统，比如你被野生动物攻击，敌人正在进攻城镇什么的，但是我实在是不想hook了，因为hook意味着你还需要把incident传入客户端，alpc是单向的，我懒得再建立一个服务器了。因此我在incident加了一个events，循环遍历把事件加入到表里面:</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001970" class="rich_pages wxw-img" data-ratio="0.32621951219512196" data-type="png" data-w="984" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d4abc4ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpbiajZCUFcNVfVoUJoD6X60qVrLmD3iawTaKkM9vicoxvoAX8zEUKAmYrA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">比如遇见敌方军队，遇见自然资源，都加进去</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001971" class="rich_pages wxw-img" data-ratio="0.5211608222490931" data-type="png" data-w="827" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=cd9dee53&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpVBLlaJ0yTyEwqq7N1foeQwzvlJTct7nE7iciceb8E9ZXVSs7d3pibHdzw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">事实证明这非常有用，基本所有的AI都靠这个做战场态势感知。</span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">移动</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" nodeleaf=""><img data-imgfileid="100001972" class="rich_pages wxw-img" data-ratio="0.43796296296296294" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=de00df49&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpYT0Q5m3RXbF89eDjS5BEibqDDtJmGSImBYjStS81VKghCCe7YUedqGA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">智能交互</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">a单位和b单位进行交互,计算两个单位是什么东西,比如村民交互了绵羊那就是在杀羊.发attack命令。士兵选择了敌方城堡 那就是攻击命令</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001973" class="rich_pages wxw-img" data-ratio="0.32314814814814813" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=77c97357&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpBnvpvzhKRPFfgQ2WtQUTD2YqsJic8C1JqW8eicp74vlehWp2oIORNS0A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">地图发现</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个工具让AI输入坐标，输出里面一定范围内有什么</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001974" class="rich_pages wxw-img" data-ratio="0.23425925925925925" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=821bffce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtp1ibjw2RVHosichiaEBtjh0woLicu5zCxHtb8zoRiaTtj3310AMOzFM7v80A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这样能方便建造，训练，位置摆放。</span><span leaf=""><br/></span><span leaf="">map_discover虽然我不想让AI作弊，但是我不想再搞个视野检查系统了，太累了，虽然能搞。但是时间有限，还是让AI作弊吧。不过AI也不知道敌人坐标，所以还好。</span></p><blockquote style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin: 5px 0px 15px;overflow: hidden;border-width: 0px 0px 0px 4px;border-top-style: initial;border-right-style: initial;border-bottom-style: initial;border-left-style: solid;border-top-color: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: rgb(122, 208, 58);border-image: initial;padding: 8px 12px;background-color: rgb(241, 241, 241);box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px;font-size: 14.992px;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">实战观测到，claude会用这个作弊，其他都是老老实实排除侦察骑兵进行侦察</span></p></blockquote><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-weight: 500;line-height: 1.2;color: rgb(102, 102, 102);font-size: 1.75rem;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">建造功能</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;color: rgb(102, 102, 102);font-family: &#34;Hiragino Sans GB&#34;, 微软雅黑, 黑体, Arial, sans-serif;font-size: 14.992px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">值得注意的是，本来建造功能没那么复杂，直接调用游戏函数判断结果的</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001976" class="rich_pages wxw-img" data-ratio="0.7333333333333333" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=775ef645&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpDc7Gtp7A53ZXuDPoVibPxD8Mpecycz5wNv5kmCx7RrGA8tCGtZqQv8A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">结果我发现：</span><span leaf=""><br/></span><span leaf="">大部分AI包括claude除了GLM,他们的”空间感”都不是很好,经常建造在重复建造的区域内…所以实在是受不了了，又自己硬编码了建筑物大小，前置信息等乱七八糟的东西，防止AI瞎搞并且给出信息</span><span leaf=""><br/></span><span leaf=""><img data-imgfileid="100001975" class="rich_pages wxw-img" data-ratio="0.9203703703703704" data-type="png" data-w="1080" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=884cee29&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpteUD5gINJhqLN8JZ7RZAtKLVCShuy5sCDhTMQbCYwVuu8n3X29SiaicA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 1.75rem;" data-pm-slice="0 0 []"><span leaf="">http服务器</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">这17个工具都用httplib暴露接口,做标准的MCP服务器</span><span leaf=""><br/></span><span leaf="">httplib</span><span leaf=""><br/></span><span leaf="">非常推荐这玩意，真的好用，祖传了几年，没出事过</span><span leaf=""><br/></span><span leaf=""><a href="https://github.com/yhirose/cpp-httplib" target="_blank">https://github.com/yhirose/cpp-httplib</a></span></p><h3 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 1.75rem;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">agent设计</span></h3><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">整个agent部分我用deepseek一边调试一边写的，deepseek可以说是第一个玩帝国时代2的agent，因为他的token真的便宜，可以给我大量的试错。经过deepseek的调整，花了几天功夫，我总结出以下几点</span></p><ol style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;" class="list-paddingleft-1"><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">所有AI没有长期规划能力，所以一定要让他们自己维护一个todolist.而且我规定必须带数字,比如搜集100食物,这规定是代码写死的，提交不明确的信息将被拒绝，事实证明这非常有效果。</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001978" data-ratio="0.2851851851851852" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=0c4e0df0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpcMdzZ8VwPqxZeyaSe2c32qPjrZ2blJIz1ia0xYJXh6IeLxTNqwdxewQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">我把10-12次对话设置为一轮，一轮后一开始是由AI自己总结对话，继续新的对话实现token”压缩”但是token压缩效果非常差，表现为deepseek经常会把错误带入到下一个对话，导致拉闸。所以我决定彻底放弃对话，而是设计一个”军师”的角色，这个角色的目的是根据现在的游戏信息+反思历史AI和工具交互的错误，总结AI的错误，这不是简单的token压缩。因此deepseek才终于能反思自己的错误避免错误传递到下一轮,并且军师的思考能直接决定战局走向。非常不错</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001980" data-ratio="0.4722222222222222" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=b36155a6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpOftUicmMTzbGic6libX5Kyn1TfFEXVwicDoQ75zdaG03fO5JIF11SQUJIg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">写告警事件: 大部分AI其实完全不会玩帝国时代2,或者说他们压根没训练过帝国时代2, 很多时候不知道自己要干什么，比如一堆空闲农民他们觉得是正常的，因此我设计了一个硬编码的告警系统，提醒他们需要干什么，比如空闲农民过多，立刻不让他们空闲之类的:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001979" data-ratio="0.7046296296296296" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=79ba9001&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpU5AjRK9yj2gqk9eeIrmTtJwVpawDoDPpMktaVtJUG2Ab3u4uslZpAA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><span leaf=""><br/></span><span leaf="">这我也没办法，毕竟AI没玩过帝国时代2，就这样AI还会出错,比如GLM:</span><span leaf=""><br/></span><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100001977" data-ratio="0.2209106239460371" style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);vertical-align: middle;border: 0px;max-width: 100%;" data-type="png" data-w="593" src="https://wechat2rss.xlab.app/img-proxy/?k=3be16eeb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWJtBEzyKEx0hJwQZpYiaGmtpl2ibibg4icoRKXiadaZTbiciaP5JoNBbw5HIsaof0ajomap8fVUKP2HpdcwQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p></li><li style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"><p><span leaf="">内置工具call: 我也不知道为什么，deepseek的深度思考是不支持工具调用的，所以我没办法，只能做一个正则匹配的内置call，具体来说匹配tools开头的标签和结尾，然后把里面的json解析出来，事实证明，其他具备agent能力的模型，是内置call也好还是openai格式的call也罢都支持挺不错的，唯一就是deepseek的think模型完全不支持这样。反正非常蛋疼</span></p></li></ol><h2 style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 0.5rem;font-family: inherit;font-weight: 500;line-height: 1.2;color: inherit;font-size: 2rem;"><span style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);"></span><span leaf="">总结</span></h2><p style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);margin-top: 0px;margin-bottom: 1rem;display: block;"><span leaf="">感谢你的耐心收看,如果你对帝国时代2的游戏引擎/游戏机制/优秀的游戏网络系统感兴趣的话，</span><strong style="box-sizing: border-box;scrollbar-width: thin;scrollbar-color: rgb(136, 136, 136) rgb(241, 241, 241);font-weight: bolder;"><span leaf="">更多详细的技术分析报告详我会整理大概半个月后发出来</span></strong><span leaf="">,微信公众号回复&#34;帝国时代2&#34;可以参与预约,如果预约的人太少,那就烂在肚子里面吧，因为他的游戏机制实在是太多，太复杂了，我还在考虑也不要在我忘记之前记录下来。</span><span leaf=""><br/></span><span leaf="">整个过程非常累人，这个工作量远远超出我的预期了，表现在，当我认为现在的功能完美能让AI用的时候，我发现AI又缺功能了，又缺功能，只能继续硬着头皮逆向，来来去去，，这种活本来预期三天的搞了快一个星期，我决定下次不整这种活了，国庆就应该好好休息。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247485632">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=2df84376&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485632%26idx%3D1%26sn%3D5099048f6d21234acfacb5f13d2c7545">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 06 Oct 2025 10:01:00 +0800</pubDate>
    </item>
    <item>
      <title>&#34;ucpd.sys后门事件&#34;详细分析技术报告-他是后门.....吗?</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247485442&amp;idx=1&amp;sn=a56332f9d4b4ef24ddcbc8da592399c8</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>为了安全鸭</span> <span>2025-09-18 10:03</span> <span style="display: inline-block;">日本</span>
</p>




<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=375c7022&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbpwhdGSZxgN5Aibd2PLhiapUN7UFSOEMCvMibkd7tNEtTv0nkicEj9vZJFw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><span leaf=""><span textstyle="" style="font-size: 24px;">前言</span></span></p><p><span leaf="">老实说,我非常不喜欢蹭热点,因为我认为人生不能把时间浪费在无意义的争论上.但是最近一篇文章引起了我的兴趣:</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001745" class="rich_pages wxw-img" data-ratio="1.1074074074074074" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=6e72555b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbuicutvbUoMkhibV5xs1gLQn7w9iczBvqaJribuZgP2Mh7MBtb4Mmw8ebibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">因为整个微信公众号,整个新闻页面,都是这玩意了,不小心点了之后,感谢大数据,我的各种社交媒体首页,也全是这玩意推荐:</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001746" class="rich_pages wxw-img" data-ratio="1.1704885343968097" data-s="300,640" data-type="png" data-w="1003" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=7a93cc02&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbicXAiaZ5QyhzJAgOAeBXcbKDuibAfpQgOonZUSM7M8C27mZnHVQRyRrmg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这些新闻无一例外都只是在散发焦虑</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">并且没有一丝技术分析</span></span></p><div><p><span leaf="">事实真的如此吗? 如果是,这会给我们什么启示? 如果不是,微软最有可能装后门的地方在哪? 让我们从技术角度详细分析.而不是被新闻焦虑冲跨</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;">根源问题</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">这一切的根源是,在Windows中,默认浏览器保存在以下注册表项中：</span></font></font></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001757" class="rich_pages wxw-img" data-ratio="0.5444444444444444" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=f35354af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbgxHW6c0FuHx1aRjuQgsBX0RwtSNTBg4UaJTN7Pqvibq3ebTLicbaMhOQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">设置默认浏览器就像设置这些键的值一样简单——相对来说比较直观。然而，某些厂商经常滥用这一功能，在未经用户同意甚至未经用户交互的情况下，将默认浏览器劫持为自己的产品。</span></font></font></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">为了解决这个问题，Windows 引入了一个</span></font></font><code style="box-sizing: border-box;font-family: &#34;Roboto Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 14px;color: rgb(108, 117, 125);word-break: break-word;"><span leaf="">Hash</span></code><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">子键，其中包含所选默认浏览器的哈希值。只有哈希值正确时，才会遵循默认浏览器设置。该哈希算法是专有的，只有在使用 Windows 的“设置”对话框进行设置时才能正确计算。它还包含当前计算机的熵，因此无法预先计算。</span></font></font></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001759" class="rich_pages wxw-img" data-ratio="0.39451114922813035" data-s="300,640" data-type="png" data-w="583" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=bb8bc3a0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbNlO7YQJIpSxnEGJAcF3EgicbogRtdRWreWCHrpylTKKg04EUbpJZCEA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;vertical-align: inherit;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">当然，这个哈希值的秘密不会持续太久。2017年，Christoph Kolbicz 逆向工程了该哈希算法，并将其部署到他的 </span></font></font><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">SetUserFTA</span></font></font><font dir="auto" style="box-sizing: border-box;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf=""> 工具中，这是一个命令行实用程序，可以设置文件类型关联或默认浏览器。2021年，Mozilla 也允许 </span></font></font><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">Firefox</span></font></font><font dir="auto" style="box-sizing: border-box;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">直接将自身设置为默认浏览器。</span></font></font></font></font></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf="">微软于 2024 年 3 月推出 UCPD 驱动程序，以应对其哈希算法的“破解”。UCPD 代表用户选择保护驱动程序，它是一种过滤驱动程序，用于保护存储默认浏览器设置（以及类似内容，例如默认 PDF 阅读器）的注册表项</span></font></font></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf=""><span textstyle="" style="font-size: 24px;">驱动逆向</span></span></font></font></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf=""><span textstyle="" style="font-size: 17px;">通过bn+MCP,我们很快的就完成了对我目前系统上的UCPD驱动逆向:</span></span></font></font></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf=""><span textstyle="" style="font-size: 17px;">这个驱动的核心逻辑之一是注册了一个注册表回调,监控windows的注册表操作</span></span></font></font></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001760" class="rich_pages wxw-img" data-ratio="0.45" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=35f61bfe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZb8rvEXQgBZl0joFjxtic1NkWLGyeRmteU7JbO0N0nPeMia6kRf1ZdPicOQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf=""><span textstyle="" style="font-size: 17px;">可以看到,会监控读写删除</span></span></font></font></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001761" class="rich_pages wxw-img" data-ratio="0.7028360049321825" data-s="300,640" data-type="png" data-w="811" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=dc408e60&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZb9P3Caj6JyO0iaubALicMu5ko9MJEHzQAPdvfaLpHCd85e2dzYMKoSb1w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"></font></font></p><p><span leaf="">而这几个回调,其实都在干一件事:</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001762" class="rich_pages wxw-img" data-ratio="0.8700564971751412" data-s="300,640" data-type="png" data-w="885" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=946071ea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbtdy1nSdVjXQMlmMpic7mPsDkAzIhZPAWn1FFbZy96VC9ic9S1GtiaxWYw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">在一个全局的保护列表里面,匹配注册表是否是被保护的对象</span></p><p><span leaf="">而这个列表是在函数</span><span leaf="">sub_1C0018310也就是驱动初始化的时候初始化的:</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001763" class="rich_pages wxw-img" data-ratio="0.637962962962963" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=7bb7af36&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbPf8dFa9oFSPemDhpbNTSoy7LArB5lEoKFq0gTnsExCtXypmQyMDftA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">列表内容包括:</span></p><p><span leaf="">默认浏览器:</span></p><p><span leaf="">Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice</span></p><p><span leaf="">默认html文件打开方式:</span></p><p><span leaf="">Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.html\\UserChoice</span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">默认pdf打开方式(额...不知道为什么):</span></p><p><span leaf="">Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.pdf\\UserChoice</span></p><p><span leaf="">系统安装时候的设备时区</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">:</span></p><p><span leaf="">SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\DeviceRegion</span></p><p><span leaf="">虽然不知道为什么,但是</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">这一块linux.do里面也说了</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001764" class="rich_pages wxw-img" data-ratio="0.8972222222222223" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=d0bde3b2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbDIKkyu9OwBlgaKKqoibBh5x4ngIoDv10OzSxRbEVM5dH7kdUKSW3C3g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">一些office文件的关联方式</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001765" data-ratio="0.43732327992459946" data-s="300,640" type="block" data-type="png" data-w="1061" src="https://wechat2rss.xlab.app/img-proxy/?k=ee9f5170&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbC75BK7r7YtIlgxOfyxI9Lvp07oOIQbRzZboicss0ej0UR69bIv2oIFA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">一些explorer的组件</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001766" data-ratio="0.8884711779448622" data-s="300,640" type="block" data-type="png" data-w="798" src="https://wechat2rss.xlab.app/img-proxy/?k=5bf8cc9a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbYNWutGKVnBnK7xibBCEUwhD3hDT1XnqsbkpUboenS4AWm6YL8T6w4Iw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">一旦匹配中了这些保护列表,会看保护的类型,保护类型有几个，这里AI搞错了,我觉得这个应该叫做&#34;策略&#34;,而不是保护类型</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001767" data-ratio="1.0342555994729907" data-s="300,640" type="block" data-type="png" data-w="759" src="https://wechat2rss.xlab.app/img-proxy/?k=8bc44ed4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbicIx4Yt6ChakDa0Tgiciabj9icEwm9juZutwibONdxpTMnibjrEUXIsAOJNg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">我们以默认浏览器为例子,他的默认级别是1</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001768" data-ratio="0.43425925925925923" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=135e5fda&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbJdZHXiaEm5JlKibSV9LvoFia8fZzSGXO9PmicEn32q3ib5hicjpIZr5QjeRQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">我们先看策略1:</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001771" class="rich_pages wxw-img" data-ratio="0.6140845070422535" data-s="300,640" data-type="png" data-w="710" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=09954aaa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbqw1bHWgUcTjXwDjaic3o4QibkARmhCo1ID1rt5m8xiaVrDqXbfaF7riahg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">策略1会先检查是否是可信进程,检查方式是</span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">是否是微软签名</span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span style="color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">可执行文件在不在单里面</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001772" data-ratio="0.6798839458413927" data-s="300,640" type="block" data-type="png" data-w="1034" src="https://wechat2rss.xlab.app/img-proxy/?k=a9e84c20&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbuTOhxSGD2uV6Xfagjmo06Ol7ibIglJKiaJG4FoQdiaPkWj501VZ3XMIXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span style="color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">其中微软签名是通过</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">内核CI.dll做签名校验</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001773" data-ratio="0.46745562130177515" data-s="300,640" type="block" data-type="png" data-w="845" src="https://wechat2rss.xlab.app/img-proxy/?k=cdb3b9a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbY9uGE4IefG6W9Ma9XBqJl1PsSBHBPwvAfBTibsjzhQrE3mEQ3AIVAkA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span style="color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">列表如下:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001776" data-ratio="0.43846153846153846" data-s="300,640" type="block" data-type="png" data-w="1040" src="https://wechat2rss.xlab.app/img-proxy/?k=3d0b2fdc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbPwQRx0g7eViaxFrllzsDnLjicuINOlG0vKbeV0McWP5QicDOicoRfpKIsA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">其中让我们记住这个</span><span style="color: rgb(108, 117, 125);font-family: &#34;Roboto Mono&#34;, Menlo, Consolas, &#34;Liberation Mono&#34;, monospace;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-weight: bold;">explorer.exe 因为这个是伏笔.jpg</span></span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">现在我们搞清楚了目前的UCPD的驱动逻辑,他非常简单,不在白名单里面的进程,禁止修改这些注册表,也就是回调返回错误</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001777" data-ratio="0.4194470924690181" data-s="300,640" type="block" data-type="png" data-w="1049" src="https://wechat2rss.xlab.app/img-proxy/?k=00fd1749&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbQsGpic2SiazIYYQngueNrliam1uI9iaeUIZcZfYqlzNicfIWicJ7Y1kbQYwg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">并且同时发一份ETW记录</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001778" data-ratio="0.9839108910891089" data-s="300,640" type="block" data-type="png" data-w="808" src="https://wechat2rss.xlab.app/img-proxy/?k=ad04ab86&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbQfJodM7iczrJIz70Yy5dG8vJPCunSQibDlfuxiaeVQR4RbTLXWuMqK6IA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">并且在阻止后,还会做一次栈回溯然后发ETW,这可以理解,毕竟需要一些信息去判断什么代码触发链.(比如检查某些未知的流氓软件在篡改主页)</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001784" data-ratio="0.5786516853932584" data-s="300,640" type="block" data-type="png" data-w="890" src="https://wechat2rss.xlab.app/img-proxy/?k=886b9899&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbzITNSCul2pYj0kSdZvC3WG2lTwOls7kpm4SdFicWXeCGxLPBZ01GA2A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 24px;">结束了?</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 17px;">你以为到这里就结束了？ 没有,还有高手!</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">UCPD这个驱动还创建了一个进程创建回调和一个object打开回调</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001779" data-ratio="0.5194444444444445" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=792b1d7c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbPhtFCGMoJ0vpyqBMZGdwKvdxx6qX6tA8um7hOJiczLfS4DZKBXgTm4Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">在进程创建的时候,会检查是否是这些进程名字或者签名,我把这个函数叫做</span><span leaf="">IsStringInChinaBlackList,里面包含了一些不能在这个公众号出现的国产软件:</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001793" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=fb3c24af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbib72jgoDe51P78VaJU40SkpCaBPStIY5pH4Rib7ZghYHia9cj9sMDH4vA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">如果是,在object回调,也就是openprocess的时候,会判断是不是这些进程,如果是,则去掉部分权限,并且发ETW记录</span></p><p><span leaf="">  被移除的权限位：</span></p><p><span leaf="">  - 0x10: 可能是 PROCESS_VM_WRITE (写入进程内存)</span></p><p><span leaf="">  - 0x28: 可能是 PROCESS_TERMINATE + 其他权限</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001781" data-ratio="0.43374642516682554" data-s="300,640" type="block" data-type="png" data-w="1049" src="https://wechat2rss.xlab.app/img-proxy/?k=8efea079&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbVR29AtsKfgHYIAyf7sGBibg7hNaQQFvibqPWUpbWyynwNvU55UElq84Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">根据</span><span leaf="">xusheng的介绍</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001792" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ac86b13b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbQOQibNAQRUFfxhsM6nGPnTVd31Ie3LyyzPZPXT2OiboZX5bAJlFfjgPA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><blockquote class="js_blockquote_wrap"><div class="js_blockquote_digest"><p><span leaf="">现在应该很容易看出其意图——它阻止 ****.exe/******.exe/********.exe....将代码注入 explorer.exe/msedge.exe！UCPD 为什么要这么做？唯一的解释是，<span textstyle="" style="font-weight: bold;">他们试图通过向 explorer.exe/msedge.exe 注入代码来绕过 UCPD</span>，因为这两者都可以修改默认浏览器的注册表项。微软不喜欢这个主意，所以它直接封禁了违规者，从而加强了防护！</span></p></div><p class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22out%22%2C%22article%22%3A%7B%7D%2C%22from%22%3A%22https%3A%2F%2Fbinary.ninja%2F2025%2F03%2F25%2Fdefault-browser-upcd.html%22%7D"><span class="blockquote_other"><a href="https://binary.ninja/2025/03/25/default-browser-upcd.html" target="_blank">https://binary.ninja/2025/03/25/default-browser-upcd.html</a></span></p></blockquote><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001783" data-ratio="1" data-s="300,640" type="block" data-type="jpeg" data-w="300" src="https://wechat2rss.xlab.app/img-proxy/?k=c62194f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbnQydtBxNicxzobuAuCSrmoYPwVsdQ79xfjvrV1ddeu9GoRcaHTPMCMw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 24px;">微软如何真的投递后门</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">我们假设,发生了ww3,微软把windows武器化了,那么作为微软,如何提前埋好后门呢?</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;font-weight: normal;">首先,微软不需要后门,他的windows update就是最大的后门,哪天推一个一键锁机补丁都有可能,不过windows update补丁被全球的安全从业人员审计着,至少在没到WW3的时候,哪怕有小规模冲突,都是不太可能投递的.(我甚至是怀疑WW3的时候大家是不是都已经没有网络了)</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">其次,如果微软真的需要&#34;偷&#34;资料,他只需要走windows defender就行了,windows defender会&#34;上传可疑文件&#34;但是这个文件怎么定义可疑,是他们说的算.保不准&#34;觉得&#34;你的文档带了中文可疑.</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-size: 16px;">但是这里只是我瞎说的,没实际证据,原因很简单,defender的代码也是被全球各地的安全人员审计着,所以如果直接来一套后门，应该不超过一个星期就被发现了.</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-size: 16px;font-weight: bold;">所以这就带来一个问题,如果是常规后门,在没做代码加密的情况下,最多一个月就会被全球安全从业人员分析出来,代码加密了,说明那一块更可疑,只会吸引更强的大哥来分析,最终变成会议ppt,比如windows的战鸟:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001789" data-ratio="0.176" data-s="300,640" type="block" data-type="png" data-w="875" src="https://wechat2rss.xlab.app/img-proxy/?k=81a2e45c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbRSw9Yfk7LfQZMA4bSWTV3NaDiaQ0OsboDicS2uicQGEfFwLo358G41QGA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247483805&amp;idx=1&amp;sn=26361efa46a7861dbde365a0f975c6a6&amp;scene=21#wechat_redirect" textvalue="微软的代码虚拟机&#34;战斗之鸟&#34;(warbird)深度研究与逆向 #1" data-itemshowtype="0" linktype="text" data-linktype="2">微软的代码虚拟机&#34;战斗之鸟&#34;(warbird)深度研究与逆向 #1</a></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyOTc0NDY2Nw==&amp;mid=2247483818&amp;idx=1&amp;sn=570acc97ae612a97755a1795f4c60d00&amp;scene=21#wechat_redirect" textvalue="微软的代码虚拟机&#34;战斗之鸟&#34;(warbird)深度研究与逆向 #2" data-itemshowtype="0" linktype="text" data-linktype="2">微软的代码虚拟机&#34;战斗之鸟&#34;(warbird)深度研究与逆向 #2</a></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">有没有更隐蔽的后门呢? 隐蔽到我们常规安全人员无法分析的?</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">有的,那就是密码学.</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">比如在我审计XP的代码的时候:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001785" data-ratio="0.9184100418410042" data-s="300,640" type="block" data-type="png" data-w="956" src="https://wechat2rss.xlab.app/img-proxy/?k=6ee50fb4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZb8QC1YO28IddcDDhaCC33AQNyOh8zbGpfxRIGcVkM7ia3N4XNTeTcRibQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100001786" class="rich_pages wxw-img" data-ratio="0.5739957716701902" data-s="300,640" data-type="png" data-w="946" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=462cd87c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbFa4b81TPcoJNSJPuJEfQfgpukZ0rwx4JJY1g5xLWrXJ10Q0vIRMllw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001787" data-ratio="0.9178498985801217" data-s="300,640" type="block" data-type="png" data-w="986" src="https://wechat2rss.xlab.app/img-proxy/?k=c8b4799a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZb5DlkaHLtt7zL7FicUhdSUiabHy3E6e6TnUT8z7Flfe6qwg2FUeOsJyQA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;font-weight: normal;">当然以上是开玩笑的meme,因为我也搞不懂为什么,我本身不是学密码学的.只是觉得好奇怪。</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">玩笑归玩笑，话说回来，让我们头脑风暴一下, 如果微软要在和平时期搞后门，而不被发现(发现了我估计第二天全球就没多少用windows的设备了)，而且我们假定后门不能是“漏洞”类型的(要不然就陷入无穷无尽的阴谋论了).</span><span textstyle="" style="font-size: 16px;font-weight: bold;">那就只有密码学</span><span textstyle="" style="font-size: 16px;">,如果我们的密码基础设施被植入后门,可以做到:</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">0. </span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(33, 37, 41); font-family: \&#34;Open Sans\&#34;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-size: 16px;">大部分安全从业人员无法察觉,这不是代码层面的事情.</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">1. 实时监控任意流量 -因为密码学存在漏洞,导致加密流量可以被解密</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">2. 伪造任意数字签名-如果密码学存在后门,攻击者完全可以伪造任意数字签名,一旦能伪造签名,重装系统就没有信任体系了.这无法防御.</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">3. 可以顺利甩锅,哪怕是windows被曝光用&#34;漏洞&#34;算法,windows也完全可以说是行业标准他带漏洞,让我打个安全更新给你修了.即便是被曝光,也不影响股票.</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 16px;">而且这事NSA又不是没干过:</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001788" data-ratio="1.3896103896103895" data-s="300,640" type="block" data-type="png" data-w="770" src="https://wechat2rss.xlab.app/img-proxy/?k=90281f07&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbG3lzmMiczicxQhEtSq7K4ALHGnXdApOc0og1C65BEL8PgpypRAHOiaMyg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf=""><span textstyle="" style="font-size: 24px;">彩蛋</span></span></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">我搜资料的时候还发现国内也有人问过怎么过这玩意改主页....</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100001769" data-ratio="0.20105263157894737" data-s="300,640" type="block" data-type="png" data-w="950" src="https://wechat2rss.xlab.app/img-proxy/?k=2b0be06a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FejibWMxI7nWLfPpNmeHIcKbjbmU2RFoZbY2wunD0zXKN5ia51sp6maT13Yy0AwahJyuu7pOibiaF6pN65rButYcfdg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="box-sizing: border-box;margin-top: 0px;margin-bottom: 1rem;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;color: rgb(33, 37, 41);font-family: &#34;Open Sans&#34;, Helvetica, Arial, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;vertical-align: inherit;"><font dir="auto" style="box-sizing: border-box;vertical-align: inherit;"><span leaf=""><span textstyle="" style="font-size: 24px;">参考资料</span></span></font></font></font></font></p><p><span leaf=""><a href="https://binary.ninja/2025/03/25/default-browser-upcd.html" target="_blank">https://binary.ninja/2025/03/25/default-browser-upcd.html</a></span></p><p><span leaf=""><a href="https://linux.do/t/topic/884669" target="_blank">https://linux.do/t/topic/884669</a></span></p><p><span leaf=""><a href="https://bbs.kanxue.com/thread-285575.htm" target="_blank">https://bbs.kanxue.com/thread-285575.htm</a></span></p><p><span leaf=""><a href="https://github.com/xusheng6" target="_blank">https://github.com/xusheng6</a></span></p></div><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247485442">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=db9eb900&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzkyOTc0NDY2Nw%3D%3D%26mid%3D2247485442%26idx%3D1%26sn%3Da56332f9d4b4ef24ddcbc8da592399c8">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 18 Sep 2025 10:03:00 +0800</pubDate>
    </item>
  </channel>
</rss>