一个破解补丁模版

瞎写了个(破解)补丁机,数据扔资源里了。

把之前的工作放进去验证了下。

2015-07-09_003935.png

Resource.png

patcher_template_v0.1.png

2015-07-09_003325.png

关键字

荔枝 微博相册下载助手 2.11 破解 补丁 下载

荔枝微博相册下载助手破解补丁-2.11.rar

2015-09-20 更新 V2.12

荔枝 微博相册下载助手 2.12 破解 补丁 下载

荔枝微博相册下载助手破解补丁-2.12.rar

Read more

[转]浅谈知识产权保护方法之加密Kinetis K60(方案二)

作者:FSL_FAE_JiCheng

上篇详细的介绍了加密锁定Kinetis的一种方法,本篇再接再厉,给大家再介绍一种加密方法(哎,这点家底都晒出来了)。当然实际上原理还是不变的,即还是通过修改0x400~0x40F地址段的内容来实现加密锁定,万变不离其宗,所谓殊途同归罢了,下面好戏登台:

既然实现security最终都是改写寄存器加载段flash地址的内容,那实际上修改flash内容的方式还是灵活多变的,方案一中提到的在中断向量表的最后添加flash配置信息只是其中一种,那还有哪些呢?还是不摆谱了,小心被拍砖,哈哈。不错,那就是通过在指定地址定义常量的方法,当然定义常量大家都会用到(有些应用譬如LCD显示的字模或者一些固定的查找表为节省RAM空间我们一般会选择定义const常量的方法将它们存放到flash空间中),但是指定地址的存放方式用的会少些(一般都是让编译器自动分配的),如果我们非要指定地址呢(哎,强迫症又开始了,呵呵),即将flash配置信息作为常量强制指定存放到0x400起始的地址,那岂不是跟方案一有了异曲同工之妙了,好吧,这样的话那就该“@”这位老兄上场了(咳咳,可不是给单片机发email啊,呵呵),相信很多人到此处就都明白了。下面我仍然以IAR环境下锁定K60为例,简单介绍下方案二的使用步骤:

  1. 打开待加密工程中的main.c文件,在其中的main函数之前以添加如下图所示常量定义,即将FlashConfig数据组数据存放到“.flashConfig”段中,其中FlashConfig[11]即为0x40C地址:
  2. 将FlashConfig数据组数据存放到“.flashConfig”段中.jpg
  3. 至于这个.flashConfig段属性是需要在与该工程匹配的IAR连接文件(.icf文件)中人为添加定义的,如下图所示,需要添加三个部分,然后保存:
  4. flashConfig段属性是需要在与该工程匹配的IAR连接文件(.icf文件)中人为添加定义的.jpg
    flashConfig段属性是需要在与该工程匹配的IAR连接文件(.icf文件)中人为添加定义的2.jpg
    flashConfig段属性是需要在与该工程匹配的IAR连接文件(.icf文件)中人为添加定义的3.jpg
  5. 前两步完成之后,其实需要添加的部分就已经完成了,但是还有特别重要的两点需要注意,这里我加红注释一下,如下:
    1. 采用方案二的情况,需要确保vectors.c中中断向量表最后的16个字节没有被添加,即不能有4个CONIFG_x配置信息的,否则会出现编译错误,因为这就涉及到两者冲突的问题,也就是说在采用方案一的话就不能采用方案二,同理,采用方案二的话也不能采用方案一,总之两者不能同存;
    2. 还需要考虑编译器优化的问题,因为我们在.flashConfig段定义了常量,但是在代码程序里却没有使用它,这种情况下编译器会直接把这段常量优化掉,所以我们做的工作算是白做了,即使我们在IAR的优化等级中设置成low或者none都不行,因为人家编译器认死理儿,反正你也没有使用它,我就是怕它pass掉,这下子伤心了,呵呵。还好IAR给我们留了条后路,在options->Linker->Input选项卡中提供了Keep symbol功能,如下图,将FlashConfig添加进去即可强制编译不优化它,这样目的就达到了,呵呵,看来还是天无绝人之路啊有木有。
    3. Keep symbol功能.jpg
  6. 编译通过,下载调试,程序下载之后同样会出现进入不到调试窗口的现象,这个是正常现象,因为这个时候芯片就已经被security了,这样就可以放心量产了,呵呵~

希望这两篇系列文章能对大家有所帮助,enjoy it~

Read more

[转]浅谈知识产权保护方法之加密Kinetis K60(方案一)

作者:FSL_FAE_JiCheng

所谓“知识产权保护”,其实就是在产品量产之后防止其芯片内部代码通过外部调试器被有效读取出来的手段,毕竟现在来说硬件电路是比较容易被复制的,如果软件再不设防的话,在山寨技术如此发达的今天(用发达来形容貌似不是很过分吧,呵呵)这个产品估计很快就会被淘汰了。

因为最近有很多客户问到关于Kinetis的加密锁定问题,所以我觉着还是有必要对其细说说的。其实飞思卡尔对于知识产权保护方面还是做了很大的功夫的,而且使用起来也是比较方便的(这点很重要),具体可以参考Kinetis的Reference Manual中Security这一章,这里我就以在IAR环境下锁定K60为例介绍一下使用方法:

  1. 首先简单介绍一下原理,即如果将K60置于Security状态(即锁定状态),则是不能通过Debug接口或者EzPort接口对芯片内部flash有任何操作的(CPU还是可以正常读写flash的,也就是说程序还是可以正常运行的,只不过是不能被外部非法读取了),当然“mass erase”命令除外(我们平时在Jlink Command窗口中敲入的unlock Kinetis命令就是触发这个命令给芯片的),通过“mass erase”命令可以再次将芯片擦除到出厂状态(即unsecure解锁的过程),这样芯片就又可以正常使用了(方便用户之后的程序升级)。咳咳,不过不用担心,解锁之后的芯片其内部的flash已经被完全擦除掉变为空片状态,也就是说内部的代码已经没有了,所以。。。懂的。。。呵呵;
  2. 说完Security的原理,下面再聊聊K60实现security的process。我们可以通过K60的FTFL_FSEC寄存器中的SEC位来设定芯片的security状态,如下图所示,芯片默认出厂状态SEC位是为10的,即非加密锁定的,而如果将SEC位设定为00、01或者11任何一种情况,则芯片都将处于锁定状态(这就是我们接下来要干的事了,呵呵)。这里可能会有人疑问,在这个寄存器在重新上电之后会保存内容吗,我只能说“咳咳,都能抢答了”,哈哈,这正是我下面要说的;
  3. FTFL_FSEC寄存器中的SEC位.jpg
  4. K60在flash中0x00000400~0x0000040F这16个字节范围的地址定义为寄存器加载地址(Flash配置区),如下图所示,而这其中0x0000040C的地址内容在芯片上电之后会被自动加载到FTFT_FSEC寄存器中,也就是说我们只需要在烧写程序的时候把相应数据写到该flash地址即可在上电之后对芯片进行加密锁定,由此实现加密锁定。
  5. 0x0000040C的地址内容.jpg
  6. 好了,原理和process都说完了,准备工作就做好了,下面就撸胳膊抹袖子开工干活吧,呵呵。其实飞思卡尔已经为我们做好了相关工作,只不过我们平时因为用不到没有注意到罢了。我们打开IAR环境,然后导入需要加密的代码工程,再打开工程目录下cpu文件组中的vectors.c和vectors.h(如果你的工程架构类似于飞思卡尔官方的sample code的话就在这个路径下)。在vectors.h里的最后部分我们会看到4个config段(共16个字节大小),如下图1,这四个段就是定义了上述0x400~0x40F的内容,其中CONFIG_4中最后的0xfe即为0x40C地址的内容(注意ARM处理器默认是little end模式的,所以0x40C在低地址),0xfe表明SEC位为10,即非加密状态,这样如果我把该0x40C地址的内容改成0xfc、0xfd或者0xff任意一个都可以实现对芯片的加密锁定。至于该四个配置段定义是如何映射到K60的flash区中的呢,去vectors.c文件中中断向量表vector_table[]的最后看看就知道了,如下图2;
  7. CONFIG_4中最后的0xfe即为0x40C地址的内容.jpg
    CONFIG_4中最后的0xfe即为0x40C地址的内容2.jpg
  8. 这里我们选择将CONFIG_4内容由原来的0xfffffffe改成0xfffffffd即可,然后保存编译通过之后,在查看其生成的s19文件中可以看到如下图所示,即0x40C地址的内容被修改成了0xfd,这样烧写文件就搞定了;
  9. 生成的s19文件中可以看到如下图所示,即0x40C地址的内容被修改成了0xfd.jpg
  10. 当然到这一步实际上还没有完,其实在IAR的新版本之后(IAR6.6之后),其自带的flashloader默认是把0x400~0x40F这段保护起来的(防止误操作对芯片意外的security),即使如上面所述修改好相应内容,在烧写的过程中flashloader也不会对这段地址的内容做任何擦除和写入。为此还需要再额外对IAR的flashloader进行配置,具体步骤如下:
    1. 进入Options->Debugger->Download,选择如下:
    2. 还需要再额外对IAR的flashloader进行配置.jpg
      还需要再额外对IAR的flashloader进行配置2.jpg
      还需要再额外对IAR的flashloader进行配置3.jpg
    3. 点击“OK”,然后系统会提示保存该修改后的flashloader配置,建议把自己修改好的.board文件保存到自己的工程目录下,方便以后直接调用该flashloader。
  11. 至此全部设置就搞定了,点击编译连接,然后下载,即可把加密后的代码烧写到芯片的flash里面去了。注意如果我们点击调试按钮的话,一旦程序烧进去之后调试器会自动复位芯片,此时加密状态位会被load到FTFT_FSEC[SEC]位中,芯片的调试端口就会被停掉,所以这时进入不到调试界面,而是弹出错误窗口,不用担心,因为此时程序已经正确烧到芯片中,我们重新插拔电源之后会看到程序已经正常执行,而此时的芯片已经处于加密状态。当然如果我们想再进入调试模式调试芯片的话,一种是通过Jlink Command窗口解锁,如下图1,另一种是再次点击调试按钮,会弹出解锁窗口,点击解锁即可,如下图2。
  12. 通过Jlink Command窗口解锁.jpg
    再次点击调试按钮,会弹出解锁窗口,点击解锁即可.jpg

Read more

[转]让你个鸟Windows和我的Linux抢IP。我就不信Linux真连Windows98的IP都抢不过!

转自:这里

其实是linux太过谦虚了。对付抢别人IP的人,就不能谦虚。

  1. #!/bin/sh
    
    while true;
    do
      ifconfig eth0 219.230.144.XXX/24 up
      route add default gw 219.230.144.OOO
      sleep 1
    done
  2. arping -uq -S 219.230.144.XXX -i eth0 219.230.144.OOO &

有兴趣的同学可试试这个

Read more

[转]iptables规则的查看、添加、删除和修改

  1. 查看
  2. iptables -nvL –line-number
    -L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数
    -n 不对ip地址进行反查,加上这个参数显示速度会快很多
    -v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
    –line-number 显示规则的序列号,这个参数在删除或修改规则时会用到

  3. 添加
  4. 添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
    当前规则:
    # iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.4          0.0.0.0/0
    添加一条规则到尾部:
    # iptables -A INPUT -s 192.168.1.5 -j DROP
    再插入一条规则到第三行,将行数直接写到规则链的后面:
    # iptables -I INPUT 3 -s 192.168.1.3 -j DROP
    查看:
    # iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.3          0.0.0.0/0
    4    DROP       all  --  192.168.1.4          0.0.0.0/0
    5    DROP       all  --  192.168.1.5          0.0.0.0/0

    可以看到192.168.1.3插入到第三行,而原来的第三行192.168.1.4变成了第四行。

  5. 删除
  6. 删除用-D参数

    删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):
    # iptables -D INPUT -s 192.168.1.5 -j DROP
    有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则。
    # iptables -nv --line-number
    iptables v1.4.7: no command specified
    Try `iptables -h' or 'iptables --help' for more information.
    # iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.3          0.0.0.0/0

    删除第二行规则
    # iptables -D INPUT 2

  7. 修改
  8. 修改使用-R参数
    先看下当前规则:
    # iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    DROP       all  --  192.168.1.5          0.0.0.0/0
    将第三条规则改为ACCEPT:
    # iptables -R INPUT 3 -j ACCEPT

    再查看下:
    # iptables -nL --line-number
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DROP       all  --  192.168.1.1          0.0.0.0/0
    2    DROP       all  --  192.168.1.2          0.0.0.0/0
    3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
    
    第三条规则的target已改为ACCEPT。
附:

Iptables 中文指南 1.1.19(html)

Iptables 中文指南 1.2.2(pdf)

Read more