当前位置: 首页 > news >正文

网站的运营与维护装饰公司做网站怎么收费

网站的运营与维护,装饰公司做网站怎么收费,404免费模板下载,查询注册公司信息在哪里查背景 当我们注入一个进程#xff0c;通过函数地址进行call时经常会遇到这样的一个问题。对方程序每周四会自动更新。更新后之前的函数地址就变化了#xff0c;然后需要重新找地址。所以#xff0c;我就使用了一个动态查询的方式。 第一步#xff1a;先为需要call的函数生…背景 当我们注入一个进程通过函数地址进行call时经常会遇到这样的一个问题。对方程序每周四会自动更新。更新后之前的函数地址就变化了然后需要重新找地址。所以我就使用了一个动态查询的方式。 第一步先为需要call的函数生成特征码。特征码其实就是反汇编后去掉地址只留操作符。 function make_search(v: dword; ms: TMemoryStream; maxsize: integer): string; var   offset: dword;   isnot_ret: boolean;   description: string; begin   ms.Clear;   Result : ;   offset : v;   isnot_ret : true;   while isnot_ret do     begin       isnot_ret : pbyte(offset)^ $C3;       disassemble_find(offset, description, ms);       if Result then         Result : Result #13#10;       Result : Result description;       if ms.Size 1024 then         Break;     end; end; disassemble_find 函数的行数太多了。 function disassemble_find(var offset: dword; var description: string; ms_find: TMemoryStream): string; overload; var   memory: TMemory;   actualread: dword;   startoffset: dword;   tempresult: string;   tempst: string;   wordptr: ^word;   dwordptr: ^dword;   dwordptr2: ^dword;   singleptr: ^single;   doubleptr: ^double;   extenedptr: ^extended;   int64ptr: ^int64;   i, j: integer; prefix: TPrefix;   prefix2: TPrefix;   isprefix: boolean; last: dword;   foundit: boolean;   search_size: integer;   str_tmp: string; begin   search_size : 0;   result : inttohex(offset, 8) - ; isprefix : true;   prefix : [$F0, $F2, $F3, $2E, $36, $3E, $26, $64, $65, $66, $67];   prefix2 : []; //forced 16-bit   if mode16 then     prefix2 : prefix2 [$66]; startoffset : offset; readmemory(pointer(offset), addr(memory), 24, actualread); / if actualread 0 then     begin       //I HATE THESE...   (I propably will not add them all, but Ill see how far I get) while isprefix do         begin           inc(offset);           if memory[0] in prefix then             begin               result : result inttohexs(memory[0], 2) ;               isprefix : true;               inc(startoffset);               prefix2 : prefix2 [memory[0]];               ReadMemory(pointer(offset), addr(memory), 24, actualread);             end           else             isprefix : false;         end; if $F0 in prefix2 then tempresult : lock ;       if $F2 in prefix2 then tempresult : tempresult repne ;       if $F3 in prefix2 then tempresult : tempresult repe ; case memory[0] of //opcode         $00:           begin             description : Add;             tempresult : tempresult add MODRM(memory, prefix2, 1, 2, last) r8(memory[1]);             inc(offset, last - 1);           end; $01:           begin             description : Add;             if $66 in prefix2 then               tempresult : tempresult ADD MODRM(memory, prefix2, 1, 1, last) r16(memory[1])             else               tempresult : tempresult ADD MODRM(memory, prefix2, 1, 0, last) r32(memory[1]);             inc(offset, last - 1); end; $02:           begin             description : Add;             tempresult : tempresult ADD r8(memory[1]) , MODRM(memory, prefix2, 1, 2, last);             tempresult : copy(tempresult, 0, length(tempresult) - 1);             inc(offset, last - 1);           end; $03:           begin             description : Add;             if $66 in prefix2 then               tempresult : tempresult ADD r16(memory[1]) , MODRM(memory, prefix2, 1, 1, last)             else               tempresult : tempresult ADD r32(memory[1]) , MODRM(memory, prefix2, 1, 0, last);             tempresult : copy(tempresult, 0, length(tempresult) - 1);             inc(offset, last - 1);           end; $04:           begin             description : Add x to y;             tempresult : tempresult ADD AL, inttohexs(memory[1], 2);             inc(offset);           end; $05:           begin             description : Add x to y;             wordptr : memory[1];             dwordptr : memory[1];             if $66 in prefix2 then               begin                 tempresult : tempresult ADD AX, inttohexs(wordptr^, 4);                 inc(offset, 2);               end             else               begin                 tempresult : tempresult ADD EAX, inttohexs(dwordptr^, 8);                 inc(offset, 4);               end;           end; 第二步查询函数地址 function search_address(ms_search: TMemoryStream; sl: tstringlist): string; var   idx, i: integer;   ms: TMemoryStream;   Mem: TMemoryBasicInformation;   dwProtect, temp: cardinal;   msize: dword;   canread, willVirtualProtect: boolean; procedure dosearch;   var     count, idx, i, l: integer;     s: string;     ms_old: TMemoryStream;     ms: TMemoryStream;   begin     ms_search.Position : 0;     ms_search.Read(count, sizeof(ms_search));     for i : 1 to count do       begin         ms : TMemoryStream.Create;         ms_old : TMemoryStream.Create; ms_search.Read(l, sizeof(l));         setlength(s, l);         ms_search.Read(s[1], l);         ms_search.Read(l, sizeof(l));         ms_old.CopyFrom(ms_search, l); ms_search.Read(l, sizeof(l));         ms.CopyFrom(ms_search, l); //if SameText(Py_GetVersion, s) then         begin           idx : search_ms(integer(Mem.BaseAddress), Mem.RegionSize, ms_old);           if idx 0 then             begin               idx : search_ms(integer(Mem.BaseAddress), Mem.RegionSize, ms);             end;           if idx 0 then             begin               sl.AddObject(s, pointer(idx));               if Result then                 Result : Result #13#10;               Result : Result s IntToStr(idx - integer(Mem.BaseAddress));             end;         end;         FreeAndNil(ms);         FreeAndNil(ms_old);       end;   end; begin   Result : ;   idx : -1;   if length(Mems) 0 then     u_mem.test;   for i : 0 to high(Mems) do     begin       if SameText(mhmain.dll, GetItemFilePath(Mems[i], Modules)) then         if Mems[i].RegionSize 1024 * 1024 * 4 then           begin             Mem : Mems[i];             idx : i;             Break;           end;     end;   if idx 0 then     exit;   canread : not IsBadReadPtr(mem.BaseAddress, mem.RegionSize);   if not canread then     begin       if VirtualProtect(mem.BaseAddress, mem.RegionSize, PAGE_EXECUTE_READWRITE, dwProtect) then         begin           canread : true;           willVirtualProtect : true;         end;     end;   if canread then     begin       dosearch;     end;   if willVirtualProtect then     VirtualProtect(mem.BaseAddress, mem.RegionSize, dwProtect, temp); end;   注意 同一个函数可能查到多个地址但是可以根据多个地址进行校验。命中的范围最集中的那个范围中的地址一般都是正确的地址。
http://www.hkea.cn/news/14528071/

相关文章:

  • 一元购网站建设多少钱网站建设 营销
  • 长治网站建设电话加快网站速度
  • 搭建网站需要哪些步骤晋江论坛手机版
  • 电子商务网站推广方案有域名有服务器怎么建站
  • 常德经开区网站重庆网站托管外包公司哪家好
  • 网站开发和推广方案云南微网站建设
  • 2015年友情链接网站源代码下载青岛专业网站制作
  • 网站维护服务器采购网站官网
  • 建设工程职称论文查询网站wordpress做新闻系统
  • 济南网站地址怎么选wordpress模板
  • ps做素材下载网站有哪些青岛html5网站制作
  • 四川省的建设厅注册中心网站金融外贸是做什么的
  • 上传到网站根目录百度竞价怎么收费
  • 西安公司网站设计建立网站的链接结构有哪几种形式?
  • 网络编程就是做网站么给自己女朋友做的网站
  • 如何设置网站域名网站基础三要素
  • 网站建设 猴王网络0成本今天军事新闻最新消息
  • 网站访问量统计怎么做wordpress文章内增加标题列表
  • 阳泉推广型网站建设营销型网站设计分析案例
  • c2c网站有哪几个php网站美化
  • 炫酷网站代码教育网站设计欣赏
  • 文库网站怎么做seoc网站开发案例详解
  • 如何自己搭建一个网站温州网站制作案例
  • 合肥有什么好的网站建设公司好国家级建设网站
  • 手机网站加百度商桥电脑网站与手机的区别
  • 网站怎么做免费推广方案广州百度推广外包
  • 衡水公司做网站建立外贸网站
  • 河北建设厅官方网站wordpress左栏主题
  • 高端网站定制的方法滨州公司做网站
  • 内蒙古网站备案网业升级坊问