鱼C论坛

 找回密码
 立即注册
查看: 2709|回复: 7

搜索并修改文件中固定的一段十六进制代码问题

[复制链接]
发表于 2011-4-22 19:32:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 soldier 于 2011-4-28 15:50 编辑

之前设计的破解程序的文件地址都是固定的 只要作者一更新主程序 只能重新修改文件地址 所以就想到试试搜索关键性代码 然后修改 这样就能解决这个问题了  下面的程序是搜索到了 关键性代码 但是就是改不了 郁闷的很···
大伙都看看 是怎么回事··· 编译环境是DEV C++


#include <stdio.h>
#include <unistd.h>
#include <windows.h>

int main()
{
    system("COLOR 0a");
    system("title O(∩_∩)O~~欢迎使用由【遲、钝dè豬】设计的程序");
    printf("======================================================================\n");
    printf("\n\tU盘杀毒专家-USBKiller V3.1 Build1102 破解程序...\n");
    printf("\n======================================================================\n");
    printf("\t\t\t\t\t\t遲、钝dè豬 QQ:1007566569\n\n");
    MessageBox(0,"\n【注意】:此程序只为技术研究,若喜欢【U盘杀毒专家】请购买正版...\n\n\t 毕竟程序是一句一句代码写出来的,需要花费很多的精力与时间...\n","注意!",MB_OK);
    MessageBox(0,"【注意】:本程序需放在该软件目录中,主程序原名【USBKiller.exe】不得更改...","提示",MB_OK);
   
    FILE *fp=NULL;
        int data=0;
        int i=0,h=0; // 记录 加/解密 字节数
        int d;
    char rvir[]={0XEB};
    if((fp=fopen("已被破解.exe","r"))==NULL)
    {
        if((fp=fopen("USBKiller.exe","rb+"))==NULL)
        {
           printf("----------------------------------------------------------------------\n");
           printf("无法打开或修改文件...【USBKiller.exe】可能正在运行...正在结束其进程...\n\n");
           system("TASKKILL /F /T /im USBKiller.exe");
           printf("----------------------------------------------------------------------\n\n");
           
        }               
        if((fp=fopen("USBKiller.exe","rb+"))!=NULL)
        {       
            system("copy USBKiller.exe 备份文件.exe>>%windir%\\temp\\tmp.tmp");
                    fseek(fp,0,2); // 将指针指向文件尾端   
                    d=ftell(fp); // 读取文件大小并存入d  
                    fseek(fp,0,0); // 重新指向文件开端
            printf("正在搜寻关键代码...\n\n");
            for(i=1;i<=d;i++) // 判断文件是否读取完毕     原本是想用变量 i 来记录指针所指向的位置 即文件地址 但现在貌似 错了
            {       
                fread(&data,0x1,1,fp); // 读取每一字节
                        if(data==0xFF)
                        {
                            fread(&data,0x1,1,fp); // 读取每一字节
                            if(data==0x2C)
                            {
                               fread(&data,0x1,1,fp);
                               if(data==0X01)
                                {
                                   fread(&data,0x1,1,fp);                     
                                   if(data==0X72)  // 其实应该修改这里的 把72 改 EB 就能破解了  但我的目的不在于破解
                                   {
                                      fread(&data,0x1,1,fp);
                                      if(data==0x0D)
                                      {
                                          fread(&data,0x1,1,fp);
                                          if(data==0x2C)  // 修改这里只是演示 由于时间关系 暂时这样设计先
                                          {                                         
                                               fwrite(rvir,0x1,1,fp); // 修改其代码  
                                               fclose(fp);  // 关闭文件
                                               system("copy USBKiller.exe 已被破解.exe>>%windir%\\temp\\tmp.tmp");
                                               system("copy 备份文件.exe USBKiller.exe>>%windir%\\temp\\tmp.tmp");
                                               unlink("备份文件.exe");
                                               MessageBox(0,"O(∩_∩)O~~~破解成功...准备运行【已被破解.exe】...\n\n【USBKiller.exe】主程序需要保留它以备升级病毒库时供升级组件验证...","~O(∩_∩)O~破解成功~",MB_OK);  
                                               spawnl(P_NOWAIT, "已被破解.exe", NULL);
                                               exit(0);
                                          }
                                      }
                                   }
                                   else if(data==0xEB)
                                   {
                                        printf("\n\n----------------------------------------------------------------------\n");
                                        printf("\t【USBKiller.exe】主程序已被破解,不需要再次破解.....");
                                        printf("\n----------------------------------------------------------------------\n\n");     
                                        system("pause");
                                        exit(0);                              
                                   }
                                   else  
                                        MessageBox(0,"无法破解该程序...可能作者已经更改其密钥算法或程序被加密!","错误",0);                                                   
                                }
                            }
                        }
                     
               
            }
        }
        else
        {
           printf("----------------------------------------------------------------------\n");
           printf("无法打修改该文件,请检查该程序的文件属性是否为只读?...\n\n");
           printf("----------------------------------------------------------------------\n\n");
        }
    }
    else
    {
        MessageBox(0,"检测到曾经被破解过的程序【已被破解.exe】存在...","提示",MB_OK);
        fclose(fp);
    }
system("pause");
exit(0);
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-23 10:45:31 | 显示全部楼层
咋就没人回答咧...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-23 11:19:58 | 显示全部楼层
不好意思,个人能力有限,对这种高深的问题实在是无能为力啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-23 11:21:21 | 显示全部楼层
回复 故乡的风 的帖子

只是 文件操作 的知识点啊 ..学到文件操作 就 应该能看懂把...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-23 23:08:18 | 显示全部楼层
改不了?能够显示MessageBox(0,"O(∩_∩)O~~~破解成功...准备运行【已被破解.exe】...\n\n【USBKiller.exe】主程序需要保留它以备升级病毒库时供升级组件验证...","~O(∩_∩)O~破解成功~",MB_OK);  这句吗?跟踪下,看到这句的时候下断点,看数据是否更改,如果更改了结束程序他又恢复了就可能是有进程守护或线程守护。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-24 02:23:49 | 显示全部楼层
回复 小甲鱼 的帖子

不 不可能,我研究过它的程序,没有进程守护,而且通过C32 找到关键跳的文件地址  直接用 C 设计一个程序 指定那个文件地址 就可以修改并且成功破解...  

而且 在   fwrite(rvir,0x1,1,fp); // 修改其代码   是被执行的 因为我曾经改成这样


                                          if(data==0x2C)  // 修改这里只是演示 由于时间关系 暂时这样设计先
                                          {         
                                               puts("找到指定位置...");                           
                                               fwrite(rvir,0x1,1,fp); // 修改其代码  
                                               puts("已经执行修改...");
                                               fclose(fp);  // 关闭文件
                                               system("copy USBKiller.exe 已被破解.exe>>%windir%\\temp\\tmp.tmp");
                                               system("copy 备份文件.exe USBKiller.exe>>%windir%\\temp\\tmp.tmp");
                                               unlink("备份文件.exe");
                                               MessageBox(0,"O(∩_∩)O~~~破解成功...准备运行【已被破解.exe】...\n\n【USBKiller.exe】主程序需要保留它以备升级病毒库时供升级组件验证...","~O(∩_∩)O~破解成功~",MB_OK);  
                                               spawnl(P_NOWAIT, "已被破解.exe", NULL);
                                               exit(0);
                                          }


程序是可以显示出 找到指定位置 和 已经执行修改  这两行字!  并且 在程序目录是有 已被破解.exe 这个文件
但是通过 MD5 发现  和原来未被破解的 MD5 是一样的!   我怀疑是不是 指针所指的位置 有问题···
但是 如果有问题的话 那它应该找不到  2C 这一个字节啊  看IF指令就知道啦  被我严格限制了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-24 04:27:43 | 显示全部楼层
搞定了!  修改过后的源码 和 程序都已经发表到 作品展示区了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2015-12-13 12:04:55 | 显示全部楼层
:big:sad
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 16:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表