
问题描述:
MD5("DIONNELLE")
如题,如果程序中包含一个MD5加密的字符串来当作密码的话! 并编译成DLL文件!
请问通过反编译,或者跟踪等黑客技术,可以得到MD5加密方式嘛? (因为我有可能是其它的加密方式)?还有可以得到里面的常量参数"DIONNELLE"嘛?
如果都可以得到,那请问如果加个变量$PS="DIONNELLE",然后再MD5($PS)
呢?
我知道经过VB\BC等编译过的DLL文件,目前还不能完全反编译! 但是通过部分反编译或跟踪等黑客技术不知道能不能得到加密的参数字符常量等!???
希望能详细说明!谢谢!如果可以得到,有什么办法可以防止!?
解析:
"DIONNELLE" 为常量,所以会放在程序的某个地方,有一个地址。
md5(md5(md5("DIONNELLE")))这样子是没有什么作用的。
反汇编出来也是几个push和call而已,没有什么作用
VB\BC等编译过的DLL文件,目前还不能完全反编译
无论是exe还是dll都可以反汇编,即使静态不行,也可以动态调试。
破解反汇编就行 了,不一定要反编译。
可以得到字符串的话,有可能得到是MD5三次循环嘛?
根据call的调用地址,绝对可以看出你是对同一个函数的三次调用。
至于看出你是否采用的是md5算法。这是根据代码的特征分析的。
如果要防止破解,最好给程序加上自己写的强壳,技术有很多我也说不了
,我也是略知一二而已,就不多说了。
public class ZipUtil { private static final String ALGORITHM = "PBEWithMD5AndDES"private static Logger logger = Logger.getLogger(ZipUtil.class)public static void zip(String zipFileName, String inputFile,String pwd) throws E...#include#include#includeintuse_foo1_1(intn){returnn}intuse_foo1_2(intn){returnn-1}intuse_foo2_1(intn,intm){returnn+m}intuse_foo2_2(intn,intm){returnn*m}voidtest1(void){typedefint(*foo_type)(int)//函数类型由函数返回值类型和参数列表类型决定typedefstd::mapfoo_map_typefoo_map_typemapmap["aaa"]=use_foo1_1map["bbb"]=use_foo1_2std::cout>foo_map_typefoo_map_typemapmap["aaa"]=std::pair(use_foo1_1,1)map["bbb"]=std::pair(use_foo2_1,2)if(map["aaa"].second==1){std::cout(map["aaa"].first))(10)(map["aaa"].first))(10,20)(map["bbb"].first))(10)(map["bbb"].first))(10,20)#include#include#include#include#includeclassfoo_container{private:classbase_foo_handler//为了能够统一存储使用接口模式做存储规范{public:virtualvoidcall(constboost::any¶ms)const=0}templateclassfoo_handler:publicbase_foo_handler//带返回值的函数包装{public:typedefHandler_Foofoo_typetypedefHandler_Params_Parse_And_Callparam_parse_and_call_typetypedefHandler_Ret_Backret_back_typefoo_handler(constfoo_type&foo,constparam_parse_and_call_type¶ms_parse,constret_back_type&ret_back):_foo(foo),_params_parse_and_call(params_parse),_ret_back(ret_back){}virtualvoidcall(constboost::any¶ms)const{_params_parse_and_call(_foo,params,_ret_back)}private:foo_type_fooparam_parse_and_call_type_params_parse_and_callret_back_type_ret_back}templateclassfoo_handler:publicbase_foo_handler//不带返回值的函数包装{public:typedefHandler_Foofoo_typetypedefHandler_Params_Parse_And_Callparam_parse_and_call_typetypedefvoidret_back_typefoo_handler(constfoo_type&foo,constparam_parse_and_call_type¶ms_parse):_foo(foo),_params_parse_and_call(params_parse){}virtualvoidcall(constboost::any¶ms)const{_params_parse_and_call(_foo,params)}private:foo_type_fooparam_parse_and_call_type_params_parse_and_call}templatestructparams_foo_switch//函数执行的规范函数{templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms)//不带返回值//参数有多少个就补充多少组{BOOST_MPL_ASSERT((boost::mpl::bool_))}templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms,constHandler_Ret_Back&ret)//带返回值//参数有多少个就补充多少组{BOOST_MPL_ASSERT((boost::mpl::bool_))//这只是个函数的说明实际用的是特例函数}}templatestructparams_foo_switch//函数执行的规范函数(1参数){templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms){typedefTupletuple_typeconsttuple_type&tuple=boost::any_cast(params)foo(boost::get(tuple))}templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms,constHandler_Ret_Back&ret){typedefTupletuple_typeconsttuple_type&tuple=boost::any_cast(params)ret(foo(boost::get(tuple)))}}templatestructparams_foo_switch//函数执行的规范函数(2参数){templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms){typedefTupletuple_typeconsttuple_type&tuple=boost::any_cast(params)foo(boost::get(tuple),boost::get(tuple))}templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms,constHandler_Ret_Back&ret){typedefTupletuple_typeconsttuple_type&tuple=boost::any_cast(params)ret(foo(boost::get(tuple),boost::get(tuple)))}}templatestructparams_foo_switch//函数执行的规范函数(3参数){templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms)//不带返回值{typedefTupletuple_typeconsttuple_type&tuple=boost::any_cast(params)foo(boost::get(tuple),boost::get(tuple),boost::get(tuple))}templatestaticvoids_params_parse_and_call(constHandler_Foo&foo,constboost::any¶ms,constHandler_Ret_Back&ret){typedefTupletuple_typeconsttuple_type&tuple=boost::any_cast(params)ret(foo(boost::get(tuple),boost::get(tuple),boost::get(tuple)))}}//如要处理4参以上的函数请自己补充,一般20参足够了copypase的体力活typedefboost::shared_ptrfoo_handler_ptr_typetypedefstd::mapmap_typetypedefmap_type::const_iteratormap_citer_typeprivate:typedeffoo_containerthis_typepublic:foo_container(void){}~foo_container(void){}templateboolregister_foo(conststd::string&name,constHandler_Foo&foo){typedefHandler_Foofoo_typetypedefTupletuple_typereturnprv_register_foo(name,foo,boost::bind(¶ms_foo_switch::value>::s_params_parse_and_call,_1,_2))}templateboolregister_foo(conststd::string&name,constHandler_Foo&foo,constHandler_Ret_Back&ret){typedefHandler_Foofoo_typetypedefHandler_Ret_Backret_back_typetypedefTupletuple_typereturnprv_register_foo(name,foo,ret,boost::bind(¶ms_foo_switch::value>::s_params_parse_and_call,_1,_2,_3))}templateboolcall(conststd::string&name,constTuple¶ms)const{map_citer_typeiter=_map.find(name)if(iter==_map.end()){returnfalse}iter->second->call(boost::any(params))returntrue}private:templateboolprv_register_foo(conststd::string&name,constHandler_Foo&foo,constHandler_Params_Parse_And_Callparams){typedeffoo_handlernow_foo_handler_typefoo_handler_ptr_typeptr(newnow_foo_handler_type(foo,params))return_map.insert(map_type::value_type(name,ptr)).second}templateboolprv_register_foo(conststd::string&name,constHandler_Foo&foo,constHandler_Ret_Back&ret,constHandler_Params_Parse_And_Call¶ms){typedeffoo_handlernow_foo_handler_typefoo_handler_ptr_typeptr(newnow_foo_handler_type(foo,params,ret))return_map.insert(map_type::value_type(name,ptr)).second}private:map_type_map}templatevoidback_ret(constT&val){std::cout>("aaa",boost::bind(&use_foo1_1,_1),boost::bind(&(back_ret),_1))cont.register_foo>("bbb",boost::bind(&use_foo2_1,_1,_2),boost::bind(&back_ret,_1))cont.call("aaa",boost::make_tuple(10))cont.call("bbb",boost::make_tuple(10,20))}intmain(intargc,char*argv[]){test1()test2()test3()charcc=0std::cin>>ccreturn0}vc2010下编译运行通过功能扩充弄清楚后你自己添加boost版本1.53欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)