亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java編程中的流氓手段(1)——天下為公

系統(tǒng) 3336 0
程序員應(yīng)是創(chuàng)造者,創(chuàng)造0與1世界中萬(wàn)物萬(wàn)象。程序員也應(yīng)是毀滅者,毀滅0與1世界中一切令人厭惡的存在。——cping1982

——————————————————————————————

俗語(yǔ)云“流氓會(huì)武術(shù),誰(shuí)都擋不住”。

在編程的世界中,這種情況依舊存在,而且比之現(xiàn)實(shí)世界還有過(guò)之而無(wú)不及。

不信你看病毒(含木馬)、外掛、流氓插件這許許多多優(yōu)秀程序員的“杰作”充斥互聯(lián)網(wǎng)上,而且愈演愈烈,大有燎原之勢(shì),試問(wèn)現(xiàn)實(shí)世界中,流氓有他們那么囂張嗎?即使那么囂張,發(fā)展能有這么快嗎?

且不但囂張,投身其中的“有志青年”還個(gè)個(gè)事業(yè)有成,雖然躋身富豪行列者還寥寥可數(shù),比之我等小程序員們,卻也可謂功成名就,家財(cái)頗豐了。

但無(wú)論再怎么羨慕人家,我們java程序員卻很難做到他們那種“成就”。不是因?yàn)樵勰懶∨率拢且驗(yàn)樵鄹愕膉ava這東西,似乎天生就不是干這些的料,再好的東西寫出來(lái),不加上個(gè)jvm就無(wú)法運(yùn)行,也讓人有氣沒(méi)處撒,望class興嘆了。

但話說(shuō)回來(lái),我害不了不用java的,我還害不了用java的?(-_-|||)。即然不能針對(duì)沒(méi)有jvm的機(jī)器,我針對(duì)使用jvm的機(jī)器下手搞這些“流氓軟件”總可以吧?

于是我決定寫些東西,一步步破壞java常規(guī),總結(jié)些針對(duì)java的流氓手段上來(lái)“大義滅親”,不為害人,只為防身。
————————————————————————————————————————

今天,我們就先來(lái)談?wù)勗趺窗裫ava中討厭的修飾類型抹殺,實(shí)現(xiàn)“天下為公”好了。

假如以下這個(gè)類是第三方組件,已經(jīng)編譯為class文件,并且沒(méi)有公開(kāi)源代。

package org.loon.virus.test;

public class test {

static public void go(){
System.out.println("0");
}

static private void go1(){
System.out.println("1");
}
static private void go2(){
System.out.println("2");
}

}

這時(shí)如果讓你去調(diào)用go函數(shù),不要說(shuō)程序員,我相信只要你告訴他方法,這世界就沒(méi)有做不到的人。

執(zhí)行后,控制臺(tái)上會(huì)輸出“0”。

但是,我這個(gè)人是變態(tài)的,不會(huì)讓你去執(zhí)行g(shù)o函數(shù),而讓去執(zhí)行g(shù)o1?看清楚,是private的。可以做到嗎?

我們來(lái)試試看吧。(為了再下面的例子,本節(jié)統(tǒng)一用反射執(zhí)行。)

public static void callVoidMethod(Class clazz, String methodName) {
try {
Method method = clazz.getMethod(methodName, null);
method.invoke(clazz, null);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static void main(String[] args) {
callVoidMethod(test.class, "go1");
}

跑個(gè)看看~

Java編程中的流氓手段(1)——天下為公

哎,剛學(xué)java的小朋友都知道,私有函數(shù)是不可能在本類外執(zhí)行的。

但是,那是指正常情況而言的,現(xiàn)在我們正常嗎?不,我們已經(jīng)不正常了!

我是流氓我怕誰(shuí)!私有了不起啊?我偏要執(zhí)行!

這時(shí)我們這群流氓就要想想,java的執(zhí)行原理是什么?

混合執(zhí)行,即同時(shí)兼具編譯執(zhí)行與解釋執(zhí)行兩者,先將java文件編譯成字節(jié)碼格式,再由Java解釋器解釋字節(jié)碼進(jìn)行執(zhí)行操作。

也就是說(shuō),只要class沒(méi)有載入虛擬機(jī),我們就能隨心所欲的“收拾它”。

這時(shí),就需要我們從字節(jié)碼上做作文章了。

現(xiàn)在我們做個(gè)工具,對(duì)class動(dòng)些手腳,再看看這私有函數(shù)到底允不允許執(zhí)行吧~

package org.loon.virus.test;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

/**
* Copyright 2008
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* @project loonframework
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class Dispark {

static private Set FILELIST = null;

final static String USERHOME = System.getProperty("user.dir");

final static String THISNAME = Dispark.class.getSimpleName();

int _index = 8; // 開(kāi)始索引

int _entrys = 1; // 大小

int _interfaces = 0; // 接口數(shù)

int _fields = 0; // 字段數(shù)

int _attributes = 0; // 屬性數(shù)

int _methods = 0; // 方法數(shù)

int _list_attributes = 0; // 對(duì)比的屬性列表

public Dispark() {
this("");
}

/**
* 加載指定路徑下文件列表
*
* @param path
*/
public void loadFileList(String path) {

File dir = new File(path);
File[] files = dir.listFiles();
if (files == null) {
return;
}
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
loadFileList(files[i].getAbsolutePath());
} else {
FILELIST.add(files[i].getAbsolutePath());
}
}
}

public Dispark(String dir) {
// 獲得對(duì)象目錄
String objDir = USERHOME;
if (dir.length() > 0) {
objDir = dir;
}
FILELIST = new HashSet(99);
// 加載指定目錄及其子目錄下所有文件
loadFileList(objDir);
// 獲得指定目錄及其子目錄下所有文件的array
Object[] list = FILELIST.toArray();
// 遍歷目錄
for (int read = 0; read < list.length; read++) {
File entrypath = new File(list[read].toString());
String fileName = entrypath.getName();
// 限制變更條件,愿意擴(kuò)大打擊面就把條件改了,后果自負(fù)……
if ((entrypath.isFile()) && (entrypath.canWrite())
&& (fileName.endsWith("test.class"))
&& !(fileName.equals((THISNAME + ".class").intern()))) {
try {
// 尋找獵物(符合條件的文件)
RandomAccessFile quarry = new RandomAccessFile(entrypath,
"rw");
// 移動(dòng)文件指針
quarry.seek(_index);
// 從當(dāng)前數(shù)據(jù)輸入流中讀取一個(gè)無(wú)符號(hào)的16位,以此數(shù)找尋標(biāo)識(shí)
_entrys = quarry.readUnsignedShort();
// 前進(jìn)索引,到達(dá)下一處字節(jié)位置
_index += 2;
// 根據(jù)目錄數(shù)處理
for (int i = 1; i < _entrys; i++) {
int tag = quarry.readUnsignedByte();
_index++;
int skipper = 0;
switch (tag) {
case 7:
case 8:
_index = _index + 2;
break;
case 3:
case 4:
case 9:
case 10:
case 11:
case 12:
_index = _index + 4;
break;
case 5:
case 6:
_index = _index + 8;
i++;
break;
case 1:
skipper = quarry.readUnsignedShort();
_index = _index + skipper + 2;
break;
}
quarry.seek(_index);
}
// 開(kāi)始屠殺獵物……
quarry.writeShort(1);
// 索引移動(dòng)
_index += 6;
quarry.seek(_index);
_interfaces = quarry.readUnsignedShort();
// 確定接口索引
_index = _index + 2 * (_interfaces) + 2;
quarry.seek(_index);
_fields = quarry.readUnsignedShort();
_index += 2;
quarry.seek(_index);
// 遍歷字段,修改
for (int j = 0; j < _fields; j++) {
int flag = quarry.readUnsignedShort();
quarry.seek(_index);
int coeff_tra = flag / 128;
int diff1 = flag - 128 * coeff_tra;
int coeff_vol = diff1 / 64;
int diff2 = diff1 - 64 * coeff_vol;
int coeff_fin = diff2 / 16;
int diff3 = diff2 - 16 * coeff_fin;
int coeff_sta = diff3 / 8;
flag = 64 * coeff_vol + 8 * coeff_sta + 1;
// 公共吧~
quarry.writeShort(flag);
// 再跳
_index += 6;
quarry.seek(_index);
_attributes = quarry.readUnsignedShort();
_index = _index + 8 * (_attributes) + 2;
quarry.seek(_index);
}
// 確定方法數(shù)
_methods = quarry.readUnsignedShort();
_index += 2;
// 逐一修改
for (int k = 0; k < _methods; k++) {
int flag = quarry.readUnsignedShort();
quarry.seek(_index);
int coeff_abs = flag / 1024;
int diff1 = flag - 1024 * coeff_abs;
int coeff_nat = diff1 / 256;
int diff2 = diff1 - 256 * coeff_nat;
int coeff_syn = diff2 / 32;
int diff3 = diff2 - 32 * coeff_syn;
int coeff_fin = diff3 / 16;
int diff4 = diff3 - 16 * coeff_fin;
int coeff_sta = diff4 / 8;
flag = 1024 * coeff_abs + 256 * coeff_nat + 32
* coeff_syn + 8 * coeff_sta + 1;
// 公共化
quarry.writeShort(flag);
// 跳
_index += 6;
quarry.seek(_index);
_list_attributes = quarry.readUnsignedShort();
_index += 2;
for (int m = 0; m < _list_attributes; m++) {
_index += 2;
quarry.seek(_index);
_index = _index + quarry.readInt() + 4;
quarry.seek(_index);
}
}
// 所有的都變了,大功告成
quarry.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

public static void callVoidMethod(Class clazz, String methodName) {
try {
Method method = clazz.getMethod(methodName, null);
method.invoke(clazz, null);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static void main(String[] args) {
Dispark ia = new Dispark();
callVoidMethod(test.class, "go1");
}
}

呵呵,那個(gè)private的go1沒(méi)了,控制臺(tái)再自然不過(guò)的打出了本來(lái)私有的“1”。

Java中似乎金科玉律的訪問(wèn)限制,在我等流氓面前,已不復(fù)存在。


下載地址: http://download.csdn.net/source/486830

Java編程中的流氓手段(1)——天下為公


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美激情毛片 | 乱人伦精品一区二区 | 久久91精品国产91久久 | 成人在色线视频在线观看免费大全 | 日本伊人网 | 日韩精品一二三区 | 日日夜夜操美女 | 日韩欧美国产偷亚洲清高 | 免费观看一级欧美大 | 色视频在线看 | 这里只有精品久久 | 可以免费观看一级毛片黄a 可以直接看的毛片 | 日日a.v拍夜夜添久久免费 | 一区二区三区不卡免费视频97 | 亚洲久久色 | 国产成人综合网在线观看 | 99久久综合狠狠综合久久aⅴ | 天天干干干干 | 伊人69| 久久99精品久久久久久臀蜜桃 | 国产精品亚洲一区二区三区 | 天天天天天天操 | 欧美精品日本一级特黄 | 久久国产精品偷 | 久久久精品久久久久久 | 欧美一级a俄罗斯毛片 | α级毛片 | 在线观看精品国语偷拍 | 日日操操 | 99精品国产福利在线观看 | 九九热视 | 亚洲一区免费视频 | 99激情网| 麻豆首页 | 精品欧美一区二区在线看片 | 四虎最新免费网址 | 大学生不戴套毛片视频 | 精品视频亚洲 | 夜色资源站www国产在线资源 | 久久久高清免费视频 | 国产成人精品综合 |