VS2017 Openssl编译

按要求安装好
ActivePerl, (https://www.activestate.com/ActivePerl)
nasm(可以不装, 要使用参数 no-asm)

命令行下进入Openssl目录执行以下命令

perl configure VC-WIN32 enable-md2 enable-rc5 --prefix="d:\openssl_bin"
perl configure VC-WIN64A enable-md2 enable-rc5 --prefix="d:\openssl_bin"

nmake
nmake test  (执行一些测试代码)
nmake install  将编译好的文件拷贝到 d:\openssl_bin 

如果提示
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module)
用以下命令安装模块
ppm install Win32::Console
默认的下载在新的ActivePerl中可能没有PPM可以用以下方法建立一个新的ActivePerl Build, 同时也可以添加 … Read More

IL 指令Opcode速查表

Opcode名称说明参数弹出(Pop)压入(Push)
00nop如果修补操作码,则填充空间。尽管可能消耗处理周期,但未执行任何有意义的操作。   
01break向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点。   
02ldarg.0将索引为 0 的参数加载到计算堆栈上。  *
03ldarg.1将索引为 1 的参数加载到计算堆栈上。  *
04ldarg.2将索引为 2 的参数加载到计算堆栈上。  *
05ldarg.3将索引为 3 的参数加载到计算堆栈上。  *
06ldloc.0将索引 0 处的局部变量加载到计算堆栈上。  *
07ldloc.1将索引 1 处的局部变量加载到计算堆栈上。  *
08ldloc.2将索引 2 处的局部变量加载到计算堆栈上。  *
09ldloc.3将索引 3 处的局部变量加载到计算堆栈上。  *
0Astloc.0从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。 * 
0Bstloc.1
Read More

BTrace 使用备忘

BTrace植入过的代码,会一直在,直到应用重启为止。所以即使Btrace退出了,业务函数每次执行时都会执行Btrace植入的代码

在Btrace脚本中只能使用 BTraceUtils 中的函数, 这在有些情况下很不方便
我们需要开启Btrace的unsafe模式
以最新的2.0版本为例, 开启方法如下
首先在命令行中 增加 -u参数指明开启 unsafe模式

btrace -u -o d:\log.txt PID d:\script.java

另外在脚本中也要增加 @BTrace(unsafe=true)

import org.openjdk.btrace.core.types.AnyType;
import org.openjdk.btrace.core.annotations.*;

import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.openjdk.btrace.core.BTraceUtils.*;

@BTrace(unsafe=true)
public class script {

	@OnMethod(
		clazz = "datalayer.CoreD", 
		method = "execute", 
		location 
Read More

C++逆向【参数传递】

MSVC x64编译的程序, 函数参数前四个整数参数将传入寄存器,整数值在 RCX、RDX、R8 和 R9 中传递 (按顺序从左到右)。参数五和更高在堆栈上传递。所有参数是将右侧对齐在注册。因此,被调用方可以根据需要忽略寄存器中上面的位,并且只访问所需的寄存器部分。

    函数参数前四个浮点型和双精度参数传入 XMM0、XMM1、XMM2、XMM3(最大可达 4 个)中,参数五和更高在堆栈上传递,并忽略常用于该基槽的整型槽(RCX、RDX、R8 和 R9)(请参见示例),反之亦然。下面分三类情况进行分析

参数传递示例 1 – 全部都是整型参数

func1(int a, int b, int c, int d, int e);  
// a in RCX, b in RDX, c in R8, d in R9, e pushed on stack

参数传递示例 2 – 全部都是浮点型参数

func2(float 
Read More

WireShark 自定义协议解析脚本

--[[
使用方法:
将脚本放在Wireshark根目录, 并修改根目录下的init.lua
在文件尾增加
dofile(DATA_DIR.."myProto.lua")
--]]
    
do
    --[[
    创建一个自定义协议myProtocol
    第一个参数是协议名称会体现在过滤器中
    第二个参数是协议的描述信息,无关紧要
    --]]
    local myProtocol = Proto("LocaPacket", "桢数据包")
    
    --协议端口号
    local hb_port = 9930

    --将字段添加到协议中
    local proto_foo = myProtocol.fields

    --协议字段, 顺序不重要, 只是定义各个字段的显示方式
    proto_foo.magic = ProtoField.bytes("Magic", "Magic", base.SPACE)
    proto_foo.magic2 = ProtoField.string("Magic2", "Magic2")
    proto_foo.data_len = ProtoField.uint16("DATA_LEN", "DataLen", base.HEX)
    proto_foo.BaseStationId = ProtoField.uint64("BaseStationId", "BaseStationId", base.HEX)
    
Read More

WinCrypt & CryptImportKey KeyBlob分析

逆向一个程序用到了 CryptImportKey CryptEncrypt 进行加密
导入的Key数据为

BYTE key[] = {
        0x08,
        0x02,
        0x00,0x00,
        0x01,0x66,0x00,0x00,
        0x08,0x00,0x00,0x00,
        0x23,0xE2,0x55,0x17,0x92,0x68,0x53,0x32
    };
//上面的数据实际上对应的结构为
struct keyBlob
{
	BLOBHEADER hdr;
	DWORD keySize;
	BYTE bytes[8];
} blob;
typedef struct _PUBLICKEYSTRUC {
        BYTE    bType;
        BYTE    bVersion;
        WORD    reserved;
        ALG_ID  aiKeyAlg;
} BLOBHEADER, PUBLICKEYSTRUC;

根据以上结构, 从 wincrypt.h 头文件中可查得头定义实际为

BYTE key[] = 
Read More

开启IDEA 文件名区分大小写

在菜单 Help | Edit Custom Properties 中
添加下面的行

idea.case.sensitive.fs=true

这将告诉IDEA区分文件名的大小写, 在做出上面的改变后, 在
选择菜单 File | Invalidate Caches 然后重启IDEA

Read More

(转)Win10实现文件名区分大小写

区分大小写的背景
Linux上是可以区分大小写的,比如可以在Linux上创建abc和ABC两个文件;Mac OS上是可以通过配置实现区分文件的大小写的;但在Windows上是不能实现的。

对于经常处理Git事务的童鞋们来说,区分文件的大小写是非常有必要的。

(1)以管理员身份运行cmd.exe

fsutil.exe file SetCaseSensitiveInfo C:\Users\walterlv\GitDemo enable

是的,就是上面这一段非常简单而容易理解的命令即可开启单个文件夹的名称区分大小写功能。只是单个文件夹!如果需要开启其他文件夹,需要多次执行这样的命令。

而如果需要关闭对此文件夹的大小写支持,只需要将 enable 改为 disable

fsutil.exe file SetCaseSensitiveInfo C:\Users\walterlv\GitDemo disable
区分大小写的效果

看!以上就是在 Windows 10 系统级开启了大小写敏感的我的一个 Git 仓库,这下可以让跨平台的 Git 工作起来在各个系统都一样了。

注意事项

以上命令的正确运行需要以下条件,缺一不可:

  1. Windows 10 四月更新(1803)
  2. 安装有 Linux 子系统,即 Windows Subsystem for Linux
  3. 所在分区为 NTFS 格式
  4. 以管理员权限运行 PowerShell

fsutil Read More

(转)芯片巨头恩智浦的前世今生

全球最大芯片并购案最终还是告吹了。

在这个过程中,作为主角之一,恩智浦公司,再次成为了大家讨论的焦点。

这家恩智浦公司,到底是一家什么公司?高通为什么拼了老命也要收购它呢?一旦收购成功,对高通、对中国,究竟意味着什么呢?

640?wx_fmt=jpeg

恩智浦,全名是恩智浦半导体公司,英文名NXP Semiconductors。

它的前身是飞利浦的半导体业务部,由飞利浦在1953年创办。对,这个飞利浦就是大家耳熟能详的那个造电吹风、剃须刀、电动牙刷的Philips。

640?wx_fmt=jpeg

飞利浦,也有译为“菲利普”

20世纪的时候,飞利浦依靠这个半导体业务部,一度成为全球最大的半导体生产商。但是进入21世纪后,因为企业发展战略调整(公司管理层打算专注医疗健康领域),加上半导体业务持续亏损,飞利浦决定将半导体业务出售。

2006年,飞利浦将半导体业务以79.13亿欧元的价格,卖给了荷兰的一个私募财团。

于是,恩智浦半导体公司正式成立,总部设在荷兰埃因霍恩。

640?wx_fmt=jpeg

恩智浦办公大楼

公司名称是NXP,蕴含的意思是 “Next Experience”(新的体验)。中文名称“恩智浦”是后来专门取的,里面的"浦"字,也暗示了它和“飞利浦”之间的继承关系。

恩智浦的主要业务,就是提供半导体系统的解决方案,主要应用于手机、个人媒体播放器、电视、机顶盒、辨识应用、汽车等电子设备。

640?wx_fmt=jpeg

2015年3月3日,恩智浦以118亿美元的价格,收购了美国的飞思卡尔半导体(Freescale Semiconductor)。

640?wx_fmt=jpeg

懂行的同学一定知道,飞思卡尔也是半导体行业里面的老牌巨头。

收购完成之后,恩智浦成功挤进了全球半导体厂商前十的行列,成为全球最大的车用半导体制造商,并且是车用半导体解决方案与通用微型控制器(MCU)的市场龙头。

640?wx_fmt=jpeg

恩智浦S32汽车处理平台

如今的恩智浦,在全球30多个国家设有业务机构,员工人数达到30000多人,2017年的营收是92.6亿美元。包括苹果、三星、西门子、富士康、索尼,都是恩智浦的客户。

在中国,恩智浦的业务也很广泛。

640?wx_fmt=jpeg

它是百度Apollo开发平台的合作伙伴,向百度提供无人驾驶、毫米波雷达、V2X、信息安全、智能网联等方面的半导体元器件。

看到这里,大家应该想到为什么高通要收购恩智浦了吧?   5G在即,万物互联时代即将到来,物联网相关行业将得到巨大的发展。作为一家在汽车电子、消费电子、工业控制等领域拥有关键影响力的半导体公司,恩智浦的价值不言而喻。尤其是汽车产业。未来的汽车绝对不是单纯的运载工具,而是一个移动的个性化信息化终端。说白了,就是有四个轮子的手机。各大厂商都在押宝车联网、无人驾驶、远程驾驶,充分说明了其中的市场前景。

恩智浦是全球最大的汽车半导体厂商,你说值不值得买?

反观高通,作为全球通信行业巨头,长期在通信芯片领域处于垄断地位,对物联网领域虎视眈眈,迫切希望通过收购恩智浦来抢占地盘,扩大芯片版图,构建新的垄断优势。

况且,高通和恩智浦由于客户群和产品领域不同,业务重合部分少、互补性强。高通业务侧重移动和计算等领域, 而恩智浦业务侧重汽车、物联网、网络融合、安全系统等领域。两者合并,属于典型的强强联合。

如果高通收购恩智浦成功,市值将达到1500亿美元,成为继三星电子、台积电、英特尔和英伟达后,全球第5大半导体企业。

一组数据看恩智浦

从下面两张IC Inights的统计数据中我们可以看到,恩智浦早在1985年的飞利浦时代,就已经跻身全球前十,这地位一直保持至今。

640?wx_fmt=jpeg

▲IC Insights数据,1985-2017年全球前十大芯片提供商

从恩智浦2013年-2017年主营业务营收图表中我们可以看到,2015年和2016年是两个关键节点。

640?wx_fmt=jpeg

▲恩智浦2013年-2017年主营业务营收

根据财报数据,2017年,恩智浦全年营收为92.56亿美元,净利润为22.72亿美元。恩智浦的主营业务分为两部分,一部分是SP“标准产品业务”,包括分立器件、低压功率器件与一些老旧的通用逻辑产品。

由于业务利润率偏低,2016年,恩智浦以27.5亿美元的价格将标准产品芯片业务卖给了中国资本公司建广资产和智路资本。因此这项业务2017年其总营收只有1.18亿美元。

640?wx_fmt=jpeg

▲恩智浦2017年主营业务营收分布

恩智浦的一部分主营业务为HPMS“高功率混合信号产品业务”,这是恩智浦的强势业务,其中包括汽车芯片、物联网芯片、移动支付芯片等。2017年,HPMS部分业务总营收达到87.45亿美元,占比九成以上,而这其中,汽车芯片业务又占了四成,并以11%的年增长率快速发展。

为了加强竞争力,2015年,恩智浦以118亿美元的价格完成了对美国车载半导体巨头飞思卡尔(Freescale Semiconductor)的收购,从而整合拥有了完整的汽车半导体解决方案(包括汽车AMS、传感器、车载娱乐系统)一举跃升为全球第一大汽车芯片厂商。这场收购当年被誉为全球最大的车载半导体收购案。

与此同时,恩智浦旗下的智能识别部有三大主营产品:安全交易、安全身份识别、标签与验证,在智能识别的市场排名第一,苹果、三星等巨头中的手机NFC芯片(近距离无线通讯技术)都是恩智浦提供的。

640?wx_fmt=jpeg

▲恩智浦2017年全球营收分布

值得一提的是,从恩智浦2017年全球不同地区营收分布中我们可以看到,恩智浦在中国的业务已经占到了全部营收将尽40%的份额,是当之无愧的第一大市场——这一点与高通非常类似,2017财年高通的全球总营收为223亿美元,其中的150亿美元都来自于中国市场,占比已经超过了60%。

不过,与高通只参与芯片设计、不参与半导体制造及封测的“无晶圆芯片厂商(Fabless)”运作模式不同,恩智浦在全球拥有14家芯片工厂,其中7家为晶圆厂(Wafer fabs)、7家为组装测试厂(Test and assembly)。… Read More