Initial Commit. Setup template Window, memory retrival.
This commit is contained in:
commit
7ad939bbe0
8
RabiTracker/.classpath
Normal file
8
RabiTracker/.classpath
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="lib" path="C:/Users/Joshua Sigona/git/sigIRCv2/lib/jna-4.5.0.jar"/>
|
||||
<classpathentry kind="lib" path="C:/Users/Joshua Sigona/git/sigIRCv2/lib/jna-platform-4.5.0.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
13
RabiTracker/.externalToolBuilders/New_Builder (7).launch
Normal file
13
RabiTracker/.externalToolBuilders/New_Builder (7).launch
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
|
||||
<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
|
||||
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
|
||||
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="RabiTracker"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/RabiTracker/projectBuilder.xml}"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
|
||||
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
|
||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/RabiTracker}"/>
|
||||
</launchConfiguration>
|
1
RabiTracker/.gitignore
vendored
Normal file
1
RabiTracker/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/bin/
|
27
RabiTracker/.project
Normal file
27
RabiTracker/.project
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>RabiTracker</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
|
||||
<triggers>full,incremental,</triggers>
|
||||
<arguments>
|
||||
<dictionary>
|
||||
<key>LaunchConfigHandle</key>
|
||||
<value><project>/.externalToolBuilders/New_Builder (7).launch</value>
|
||||
</dictionary>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
11
RabiTracker/.settings/org.eclipse.jdt.core.prefs
Normal file
11
RabiTracker/.settings/org.eclipse.jdt.core.prefs
Normal file
@ -0,0 +1,11 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
BIN
RabiTracker/RabiTracker.jar
Normal file
BIN
RabiTracker/RabiTracker.jar
Normal file
Binary file not shown.
18
RabiTracker/projectBuilder.xml
Normal file
18
RabiTracker/projectBuilder.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<project default="create_run_jar" name="Create Runnable Jar for Rabi Tracker">
|
||||
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
|
||||
<!--ANT 1.7 is required -->
|
||||
<!--define folder properties-->
|
||||
<property name="dir.buildfile" value="."/>
|
||||
<property name="dir.workspace" value="${dir.buildfile}/.."/>
|
||||
<property name="dir.jarfile" value="${dir.buildfile}"/>
|
||||
<target name="create_run_jar">
|
||||
<jar destfile="${dir.jarfile}/RabiTracker.jar" filesetmanifest="mergewithoutmain">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="RabiTracker.Window"/>
|
||||
<attribute name="Class-Path" value="."/>
|
||||
</manifest>
|
||||
<fileset dir="${dir.jarfile}/bin"/>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
151
RabiTracker/src/RabiTracker/MemoryData.java
Normal file
151
RabiTracker/src/RabiTracker/MemoryData.java
Normal file
@ -0,0 +1,151 @@
|
||||
package RabiTracker;
|
||||
|
||||
import sig.modules.RabiRibi.OffsetHelper;
|
||||
|
||||
public enum MemoryData {
|
||||
MONEY(0xD654CC),
|
||||
PLAYTIME(0xD642D8),
|
||||
HEALTHUP_START(0xD6342C),
|
||||
HEALTHUP_END(0xD6342C),
|
||||
ATTACKUP_START(0xD6352C),
|
||||
ATTACKUP_END(0xD63628),
|
||||
MANAUP_START(0xD6362C),
|
||||
MANAUP_END(0xD63728),
|
||||
REGENUP_START(0xD6372C),
|
||||
REGENUP_END(0xD63828),
|
||||
PACKUP_START(0xD6382C),
|
||||
PACKUP_END(0xD63928),
|
||||
/*ENTITY_ARRAY(0x0096DA3C), //Erina Data Pointer.
|
||||
ERINA_HP(0x4D8),
|
||||
ERINA_MAXHP(0x4E8),
|
||||
ERINA_XPOS(0xC),
|
||||
ERINA_YPOS(0x10),
|
||||
ERINA_XSPEED(0x470), //Relative to Entity Array.
|
||||
ERINA_YSPEED(0x474), //Relative to Entity Array.
|
||||
MAPID(0xA600AC),
|
||||
CAMERA_XPOS(0x991AF4),
|
||||
CAMERA_YPOS(0xABD0A4),
|
||||
//ENTITY_SIZE(0x704),
|
||||
ENTITY_ID(0x4F4),
|
||||
ENTITY_HP(0x4D8),
|
||||
ENTITY_MAXHP(0x4E8),
|
||||
ENTITY_ISACTIVE(0x674),
|
||||
ENTITY_ANIMATION(0x678),
|
||||
ENTITY_XPOS(0xC),
|
||||
ENTITY_YPOS(0x10),
|
||||
ENTITY_COLOR(0x1C),
|
||||
TRANSITION_COUNTER(0xA7661C),*/
|
||||
//WARP_TRANSITION_COUNTER(0,0x582CE0+OffsetHelper.KEY_ITEM_OFFSET_V185_TO_V1851), //Detects pausing
|
||||
|
||||
|
||||
|
||||
GAME_DIFFICULTY(0xD64338),
|
||||
GAME_LOOP(0xD6D05C),
|
||||
|
||||
HAMMER(0xD632B0),
|
||||
AIR_JUMP(0xD632B4),
|
||||
SLIDING_POWDER(0xD632B8),
|
||||
CARROT_BOMB(0xD632BC),
|
||||
HOURGLASS(0xD632C0),
|
||||
SPEED_BOOST(0xD632C4),
|
||||
AUTO_EARRINGS(0xD632C8),
|
||||
RIBBON(0xD632CC),
|
||||
SOUL_HEART(0xD632D0),
|
||||
RABI_SLIPPERS(0xD632D4),
|
||||
BUNNY_WHIRL(0xD632D8),
|
||||
QUICK_BARETTE(0xD632DC),
|
||||
BOOK_OF_CARROT(0xD632E0),
|
||||
CHAOS_ROD(0xD632E4),
|
||||
HAMMER_WAVE(0xD632E8),
|
||||
HAMMER_ROLL(0xD632EC),
|
||||
LIGHT_ORB(0xD632F0),
|
||||
WATER_ORB(0xD632F4),
|
||||
FIRE_ORB(0xD632F8),
|
||||
NATURE_ORB(0xD632FC),
|
||||
P_HAIRPIN(0xD63300),
|
||||
SUNNY_BEAM(0xD63304),
|
||||
PLUS_NECKLACE(0xD63308),
|
||||
CYBER_FLOWER(0xD6330C),
|
||||
HEALING_STAFF(0xD63310),
|
||||
MAX_BRACELET(0xD63314),
|
||||
EXPLODE_SHOT(0xD63318),
|
||||
AIR_DASH(0xD6331C),
|
||||
BUNNY_STRIKE(0xD63320),
|
||||
STRANGE_BOX(0xD63324),
|
||||
WALL_JUMP(0xD63328),
|
||||
SPIKE_BARRIER(0xD6332C),
|
||||
BUNNY_AMULET(0xD63330),
|
||||
CHARGE_RING(0xD63334),
|
||||
CARROT_SHOOTER(0xD63338),
|
||||
SUPER_CARROT(0xD6333C),
|
||||
RUMI_DONUT(0xD63340),
|
||||
RUMI_CAKE(0xD63344),
|
||||
GOLD_CARROT(0xD63348),
|
||||
COCOA_BOMB(0xD6334C),
|
||||
UNKNOWN_ITEM1(0xD63350),
|
||||
TROPHY(0xD63354),
|
||||
EXCLAMATION_POINT(0xD63358),
|
||||
UNKNOWN_ITEM2(0xD6335C),
|
||||
UNKNOWN_ITEM3(0xD63360),
|
||||
UNKNOWN_ITEM4(0xD63364),
|
||||
RAINBOW_MAGIC(0xD63368),
|
||||
UNKNOWN_ITEM5(0xD6336C),
|
||||
UNKNOWN_ITEM6(0xD63370),
|
||||
UNKNOWN_ITEM7(0xD63374),
|
||||
UNKNOWN_ITEM8(0xD63378),
|
||||
UNKNOWN_ITEM9(0xD6337C),
|
||||
UNKNOWN_ITEM10(0xD63380),
|
||||
UNKNOWN_ITEM11(0xD63384),
|
||||
UNKNOWN_ITEM12(0xD63388),
|
||||
UNKNOWN_ITEM13(0xD6338C),
|
||||
UNKNOWN_ITEM14(0xD63390),
|
||||
/*DLC_ITEM1(0xD63394,0xD63394+OffsetHelper.KEY_ITEM_OFFSET_V175_TO_V1851),
|
||||
DLC_ITEM2(0xD63398,0xD63398+OffsetHelper.KEY_ITEM_OFFSET_V175_TO_V1851),*/
|
||||
BUNNY_CLOVER(0xD6339C),
|
||||
FAIRYS_FLUTE(0),
|
||||
BUNNY_MEMORIES(0),
|
||||
WIND_BLESSING(0),
|
||||
DLC_ITEM4(0xD633A0),
|
||||
BADGE_HEALTH_PLUS(0xD633AC),
|
||||
BADGE_HEALTH_SURGE(0xD633B0),
|
||||
BADGE_MANA_PLUS(0xD633B4),
|
||||
BADGE_MANA_SURGE(0xD633B8),
|
||||
BADGE_CRISIS_BOOST(0xD633BC),
|
||||
BADGE_ATK_GROW(0xD633C0),
|
||||
BADGE_DEF_GROW(0xD633C4),
|
||||
BADGE_ATK_TRADE(0xD633C8),
|
||||
BADGE_DEF_TRADE(0xD633CC),
|
||||
BADGE_ARM_STRENGTH(0xD633D0),
|
||||
BADGE_CARROT_BOOST(0xD633D4),
|
||||
BADGE_WEAKEN(0xD633D8),
|
||||
BADGE_SELF_DEFENSE(0xD633DC),
|
||||
BADGE_ARMORED(0xD633E0),
|
||||
BADGE_LUCKY_SEVEN(0xD633E4),
|
||||
BADGE_HEX_CANCEL(0xD633E8),
|
||||
BADGE_PURE_LOVE(0xD633EC),
|
||||
BADGE_TOXIC_STRIKE(0xD633F0),
|
||||
BADGE_FRAME_CANCEL(0xD633F4),
|
||||
BADGE_HEALTH_WAGER(0xD633F8),
|
||||
BADGE_MANA_WAGER(0xD633FC),
|
||||
BADGE_STAMINA_PLUS(0xD63400),
|
||||
BADGE_BLESSED(0xD63404),
|
||||
BADGE_HITBOX_DOWN(0xD63408),
|
||||
BADGE_CASHBACK(0xD6340C),
|
||||
BADGE_SURVIVAL(0xD63410),
|
||||
BADGE_TOP_FORM(0xD63414),
|
||||
BADGE_TOUGH_SKIN(0xD63418),
|
||||
BADGE_ERINA_BADGE(0xD6341C),
|
||||
BADGE_RIBBON_BADGE(0xD63420),
|
||||
BADGE_AUTO_TRIGGER(0xD63424),
|
||||
BADGE_LILITHS_GIFT(0xD63428),
|
||||
//13413E8
|
||||
ITEM_PERCENT(0),
|
||||
MAP_PERCENT(0),
|
||||
RAINBOW_EGG_COUNT(0xD65FD4),
|
||||
PAUSED(0),
|
||||
;
|
||||
|
||||
public MemoryData(long baseAddress) {
|
||||
|
||||
}
|
||||
}
|
98
RabiTracker/src/RabiTracker/MemoryManager.java
Normal file
98
RabiTracker/src/RabiTracker/MemoryManager.java
Normal file
@ -0,0 +1,98 @@
|
||||
package RabiTracker;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.platform.win32.Kernel32;
|
||||
import com.sun.jna.platform.win32.WinNT;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
|
||||
import sig.modules.utils.PsapiTools;
|
||||
|
||||
public class MemoryManager {
|
||||
final int PROCESS_PERMISSIONS = WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ;
|
||||
boolean foundRabiRibi = false;
|
||||
int rabiRibiPID = -1;
|
||||
long rabiRibiMemOffset = 0;
|
||||
public HANDLE rabiribiProcess = null;
|
||||
|
||||
MemoryManager() {
|
||||
CheckRabiRibiClient();
|
||||
|
||||
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||
scheduler.scheduleWithFixedDelay(()->{
|
||||
CheckRabiRibiClient();
|
||||
if (foundRabiRibi) {
|
||||
/*myProfile.uploadProfile();
|
||||
getSessionList();
|
||||
getMessageUpdates();
|
||||
//trimeadProfile.downloadProfile();
|
||||
firstCheck=true;
|
||||
if (mySession!=null) {
|
||||
File file = new File(sigIRC.BASEDIR+"sigIRC/tmp.data");
|
||||
try {
|
||||
org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=keepalivesession&session="+mySession.getID()),file);
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}, 5000, 5000, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
private void CheckRabiRibiClient() {
|
||||
List<Integer> pids;
|
||||
try {
|
||||
pids = PsapiTools.getInstance().enumProcesses();
|
||||
boolean found=false;
|
||||
for (Integer pid : pids) {
|
||||
HANDLE process = Kernel32.INSTANCE.OpenProcess(PROCESS_PERMISSIONS, true, pid);
|
||||
List<sig.modules.utils.Module> hModules;
|
||||
try {
|
||||
hModules = PsapiTools.getInstance().EnumProcessModules(process);
|
||||
for(sig.modules.utils.Module m: hModules){
|
||||
//System.out.println(m.getFileName()+":"+m.getEntryPoint());
|
||||
if (m.getFileName().contains("rabiribi")) {
|
||||
found=true;
|
||||
if (!foundRabiRibi) {
|
||||
rabiRibiMemOffset = Pointer.nativeValue(m.getLpBaseOfDll().getPointer());
|
||||
System.out.println("Found an instance of Rabi-Ribi at 0x"+Long.toHexString(rabiRibiMemOffset)+" | File:"+m.getFileName()+","+m.getBaseName());
|
||||
rabiRibiPID=pid;
|
||||
foundRabiRibi=true;
|
||||
rabiribiProcess=process;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (process!=null) {
|
||||
Kernel32.INSTANCE.CloseHandle(process);
|
||||
}
|
||||
}
|
||||
if (!found && foundRabiRibi) {
|
||||
foundRabiRibi=false;
|
||||
System.out.println("Rabi-Ribi process lost.");
|
||||
} else
|
||||
if (!foundRabiRibi) {
|
||||
System.out.println("Failed to find Rabi-Ribi.");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
92
RabiTracker/src/RabiTracker/Window.java
Normal file
92
RabiTracker/src/RabiTracker/Window.java
Normal file
@ -0,0 +1,92 @@
|
||||
package RabiTracker;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.util.Calendar;
|
||||
import java.util.Timer;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
class DrawingPanel extends JPanel {
|
||||
Window parent;
|
||||
|
||||
public DrawingPanel(Window parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
|
||||
parent.drawGUI(g);
|
||||
|
||||
parent.frames++;
|
||||
}
|
||||
}
|
||||
|
||||
public class Window extends JFrame{
|
||||
final static String WINDOW_TITLE = "Rabi Tracker v1.0";
|
||||
public static int MAX_FPS = 60;
|
||||
|
||||
public static int TICK = 0;
|
||||
|
||||
JFrame window = new JFrame("Rabi Tracker v1.0");
|
||||
DrawingPanel panel = new DrawingPanel(this);
|
||||
|
||||
MemoryManager mem = new MemoryManager();
|
||||
|
||||
int timer = Calendar.getInstance().get(Calendar.SECOND);
|
||||
public int frames = 0;
|
||||
|
||||
public void setTitle(String str) {
|
||||
window.setTitle(WINDOW_TITLE+" "+str);
|
||||
}
|
||||
|
||||
public void drawGUI(Graphics g) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void display() {
|
||||
window.setSize(640, 480);
|
||||
window.setResizable(true);
|
||||
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
||||
panel.setSize(640, 480);
|
||||
panel.setBackground(Color.MAGENTA);
|
||||
|
||||
window.getContentPane().add(panel);
|
||||
window.setVisible(true);
|
||||
}
|
||||
|
||||
private void runTick() {
|
||||
Window.TICK++;
|
||||
panel.repaint();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
int new_val = Calendar.getInstance().get(Calendar.SECOND);
|
||||
int current_tick = Calendar.getInstance().get(Calendar.MILLISECOND);
|
||||
if (new_val!=timer) {
|
||||
setTitle("- "+frames+" FPS");
|
||||
frames=0;
|
||||
timer = new_val;
|
||||
}
|
||||
try {
|
||||
runTick();
|
||||
Thread.sleep((long)(1000d/MAX_FPS));
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.setProperty("sun.java2d.opengl", "True");
|
||||
|
||||
Window program = new Window();
|
||||
program.display();
|
||||
while (true) {
|
||||
program.update();
|
||||
}
|
||||
}
|
||||
}
|
64
RabiTracker/src/sig/modules/utils/Module.java
Normal file
64
RabiTracker/src/sig/modules/utils/Module.java
Normal file
@ -0,0 +1,64 @@
|
||||
package sig.modules.utils;
|
||||
|
||||
import sig.modules.utils.Psapi.LPMODULEINFO;
|
||||
import com.sun.jna.platform.win32.WinDef.HMODULE;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
|
||||
public class Module {
|
||||
private HANDLE hProcess;
|
||||
private HMODULE hModule;
|
||||
private HANDLE lpBaseOfDll = null;
|
||||
private int SizeOfImage = 0;
|
||||
private HANDLE EntryPoint = null;
|
||||
|
||||
private PsapiTools psapi = PsapiTools.getInstance();
|
||||
|
||||
protected Module() {
|
||||
}
|
||||
|
||||
public Module(HANDLE hProcess, HMODULE hModule) {
|
||||
this.hProcess = hProcess;
|
||||
this.hModule = hModule;
|
||||
}
|
||||
|
||||
public HMODULE getPointer() {
|
||||
return hModule;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return psapi.GetModuleFileNameExA(hProcess, hModule);
|
||||
}
|
||||
|
||||
public String getBaseName() {
|
||||
return psapi.GetModuleBaseNameA(hProcess, hModule);
|
||||
}
|
||||
|
||||
private void GetModuleInformation() {
|
||||
if (lpBaseOfDll == null) {
|
||||
try {
|
||||
LPMODULEINFO x = psapi.GetModuleInformation(hProcess, hModule);
|
||||
lpBaseOfDll = x.lpBaseOfDll;
|
||||
SizeOfImage = x.SizeOfImage;
|
||||
EntryPoint = x.EntryPoint;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public HANDLE getLpBaseOfDll() {
|
||||
GetModuleInformation();
|
||||
return lpBaseOfDll;
|
||||
}
|
||||
|
||||
public int getSizeOfImage() {
|
||||
GetModuleInformation();
|
||||
return SizeOfImage;
|
||||
}
|
||||
|
||||
public HANDLE getEntryPoint() {
|
||||
GetModuleInformation();
|
||||
return EntryPoint;
|
||||
}
|
||||
|
||||
}
|
81
RabiTracker/src/sig/modules/utils/MyKernel32.java
Normal file
81
RabiTracker/src/sig/modules/utils/MyKernel32.java
Normal file
@ -0,0 +1,81 @@
|
||||
package sig.modules.utils;
|
||||
|
||||
import com.sun.jna.Memory;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.platform.win32.Kernel32;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
|
||||
public interface MyKernel32 extends Kernel32 {
|
||||
final Kernel32 INSTANCE = (Kernel32) Native.loadLibrary ("kernel32", Kernel32.class);
|
||||
|
||||
// BOOL WINAPI WriteProcessMemory(
|
||||
// __in HANDLE hProcess,
|
||||
// __in LPVOID lpBaseAddress,
|
||||
// __in LPCVOID lpBuffer,
|
||||
// __in SIZE_T nSize,
|
||||
// __out SIZE_T *lpNumberOfBytesWritten
|
||||
// );
|
||||
boolean WriteProcessMemory(HANDLE p, int address, HANDLE buffer, int size, IntByReference written);
|
||||
|
||||
|
||||
// BOOL WINAPI ReadProcessMemory(
|
||||
// __in HANDLE hProcess,
|
||||
// __in LPCVOID lpBaseAddress,
|
||||
// __out LPVOID lpBuffer,
|
||||
// __in SIZE_T nSize,
|
||||
// __out SIZE_T *lpNumberOfBytesRead
|
||||
// );
|
||||
boolean ReadProcessMemory(HANDLE hProcess, int inBaseAddress, Memory outputBuffer, int nSize, IntByReference outNumberOfBytesRead);
|
||||
|
||||
|
||||
// HANDLE WINAPI OpenProcess(
|
||||
// __in DWORD dwDesiredAccess,
|
||||
// __in BOOL bInheritHandle,
|
||||
// __in DWORD dwProcessId
|
||||
// );
|
||||
HANDLE OpenProcess(int desired, boolean inherit, int pid);
|
||||
|
||||
|
||||
// BOOL WINAPI EnumProcessModules(
|
||||
// _In_ HANDLE hProcess,
|
||||
// _Out_ HMODULE *lphModule,
|
||||
// _In_ DWORD cb,
|
||||
// _Out_ LPDWORD lpcbNeeded
|
||||
// );
|
||||
boolean EnumProcessModules(HANDLE hProcess, HMODULE lphModule, int cb, int lpcbNeeded);
|
||||
|
||||
|
||||
// DWORD WINAPI GetModuleFileName(
|
||||
// _In_opt_ HMODULE hModule,
|
||||
// _Out_ LPTSTR lpFilename,
|
||||
// _In_ DWORD nSize
|
||||
// );
|
||||
|
||||
int GetModuleFileName(HMODULE hModule, String lpFilename, int size);
|
||||
|
||||
// DWORD WINAPI GetModuleFileNameEx(
|
||||
// _In_ HANDLE hProcess,
|
||||
// _In_opt_ HMODULE hModule,
|
||||
// _Out_ LPTSTR lpFilename,
|
||||
// _In_ DWORD nSize
|
||||
// );
|
||||
|
||||
|
||||
// BOOL WINAPI GetModuleHandleEx(
|
||||
// _In_ DWORD dwFlags,
|
||||
// _In_opt_ LPCTSTR lpModuleName,
|
||||
// _Out_ HMODULE *phModule
|
||||
// );
|
||||
|
||||
int GetModuleHandleExA(int permissions, String lpFilename, HMODULE module);
|
||||
|
||||
// BOOL WINAPI EnumProcesses(
|
||||
// _Out_ DWORD *pProcessIds,
|
||||
// _In_ DWORD cb,
|
||||
// _Out_ DWORD *pBytesReturned
|
||||
// );
|
||||
|
||||
boolean EnumProcesses(int[] processIds, int cb, int bytesReturned);
|
||||
|
||||
int GetLastError();
|
||||
}
|
12
RabiTracker/src/sig/modules/utils/MyUser32.java
Normal file
12
RabiTracker/src/sig/modules/utils/MyUser32.java
Normal file
@ -0,0 +1,12 @@
|
||||
package sig.modules.utils;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.platform.win32.User32;
|
||||
|
||||
public interface MyUser32 extends User32 {
|
||||
final User32 INSTANCE = (User32) Native.loadLibrary ("user32", User32.class);
|
||||
boolean ShowWindow(HWND hWnd, int nCmdShow);
|
||||
boolean SetForegroundWindow(HWND hWnd);
|
||||
HWND FindWindowA(String lpClassName, String lpWindowName);
|
||||
|
||||
}
|
57
RabiTracker/src/sig/modules/utils/Psapi.java
Normal file
57
RabiTracker/src/sig/modules/utils/Psapi.java
Normal file
@ -0,0 +1,57 @@
|
||||
package sig.modules.utils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.platform.win32.WinDef.HMODULE;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.win32.StdCallLibrary;
|
||||
|
||||
public interface Psapi extends StdCallLibrary{
|
||||
Psapi INSTANCE = (Psapi) Native.loadLibrary("Psapi", Psapi.class);
|
||||
|
||||
/*
|
||||
* http://msdn.microsoft.com/en-us/library/ms682629(VS.85).aspx
|
||||
*/
|
||||
boolean EnumProcesses(int[] pProcessIds, int cb, IntByReference pBytesReturned);
|
||||
|
||||
|
||||
/*
|
||||
* http://msdn.microsoft.com/en-us/library/ms682631(VS.85).aspx
|
||||
*/
|
||||
boolean EnumProcessModules(HANDLE hProcess, HMODULE[] lphModule, int cb, IntByReference lpcbNeededs);
|
||||
|
||||
boolean EnumProcessModulesEx(HANDLE hProcess, HMODULE[] lphModule, int cb, IntByReference lpcbNeededs, int flags);
|
||||
|
||||
|
||||
/*
|
||||
* http://msdn.microsoft.com/en-us/library/ms683198(VS.85).aspx
|
||||
*/
|
||||
int GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule, byte[] lpImageFileName, int nSize);
|
||||
|
||||
int GetModuleBaseNameA(HANDLE hProcess, HMODULE hModule, byte[] lpImageFileName, int nSize);
|
||||
|
||||
|
||||
/*
|
||||
* http://msdn.microsoft.com/en-us/library/ms684229(VS.85).aspx
|
||||
*/
|
||||
public static class LPMODULEINFO extends Structure {
|
||||
public HANDLE lpBaseOfDll;
|
||||
public int SizeOfImage;
|
||||
public HANDLE EntryPoint;
|
||||
@Override
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "lpBaseOfDll", "SizeOfImage", "EntryPoint"});
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* http://msdn.microsoft.com/en-us/library/ms683201(VS.85).aspx
|
||||
*/
|
||||
boolean GetModuleInformation(HANDLE hProcess, HMODULE hModule, LPMODULEINFO lpmodinfo, int cb);
|
||||
|
||||
|
||||
}
|
104
RabiTracker/src/sig/modules/utils/PsapiTools.java
Normal file
104
RabiTracker/src/sig/modules/utils/PsapiTools.java
Normal file
@ -0,0 +1,104 @@
|
||||
package sig.modules.utils;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import sig.modules.utils.Psapi.LPMODULEINFO;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.platform.win32.Kernel32;
|
||||
import com.sun.jna.platform.win32.WinDef.HMODULE;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
|
||||
public class PsapiTools {
|
||||
private static PsapiTools INSTANCE=null;
|
||||
private static Psapi psapi = Psapi.INSTANCE;
|
||||
private static Kernel32 k32 = MyKernel32.INSTANCE;
|
||||
|
||||
private PsapiTools(){}
|
||||
|
||||
public static PsapiTools getInstance(){
|
||||
if (INSTANCE==null)
|
||||
INSTANCE=new PsapiTools();
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
|
||||
public List<Integer> enumProcesses() throws Exception{
|
||||
List<Integer> list = new LinkedList<Integer>();
|
||||
|
||||
int[] pProcessIds = new int[1024];
|
||||
IntByReference pBytesReturned = new IntByReference();
|
||||
boolean success = psapi.EnumProcesses(pProcessIds, pProcessIds.length*Integer.SIZE/8, pBytesReturned);
|
||||
if (!success){
|
||||
int err=k32.GetLastError();
|
||||
throw new Exception("EnumProcesses failed. Error: "+err);
|
||||
}
|
||||
|
||||
int size = (pBytesReturned.getValue()/(Integer.SIZE/8));
|
||||
for (int i=0;i<size;i++)
|
||||
list.add(pProcessIds[i]);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<Module> EnumProcessModules(HANDLE hProcess) throws Exception{
|
||||
List<Module> list = new LinkedList<Module>();
|
||||
|
||||
HMODULE[] lphModule = new HMODULE[1024];
|
||||
IntByReference lpcbNeededs= new IntByReference();
|
||||
boolean success = psapi.EnumProcessModules(hProcess, lphModule, lphModule.length, lpcbNeededs);
|
||||
if (!success){
|
||||
int err=k32.GetLastError();
|
||||
if (err!=6 && err!=299 /*Generic Errors*/) {
|
||||
throw new Exception("EnumProcessModules failed. Error: "+err);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < lpcbNeededs.getValue()/4; i++) {
|
||||
list.add(new Module(hProcess, lphModule[i]));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<Module> EnumProcessModulesEx(HANDLE hProcess, int flags) throws Exception{
|
||||
List<Module> list = new LinkedList<Module>();
|
||||
|
||||
HMODULE[] lphModule = new HMODULE[1024];
|
||||
IntByReference lpcbNeededs= new IntByReference();
|
||||
boolean success = psapi.EnumProcessModulesEx(hProcess, lphModule, lphModule.length, lpcbNeededs, flags);
|
||||
if (!success){
|
||||
int err=k32.GetLastError();
|
||||
throw new Exception("EnumProcessModules failed. Error: "+err);
|
||||
}
|
||||
for (int i = 0; i < lpcbNeededs.getValue()/4; i++) {
|
||||
list.add(new Module(hProcess, lphModule[i]));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public String GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule){
|
||||
byte[] lpImageFileName= new byte[256];
|
||||
psapi.GetModuleFileNameExA(hProcess, hModule, lpImageFileName, 256);
|
||||
return Native.toString(lpImageFileName);
|
||||
}
|
||||
|
||||
public String GetModuleBaseNameA(HANDLE hProcess, HMODULE hModule){
|
||||
byte[] lpImageFileName= new byte[256];
|
||||
psapi.GetModuleBaseNameA(hProcess, hModule, lpImageFileName, 256);
|
||||
return Native.toString(lpImageFileName);
|
||||
}
|
||||
|
||||
public LPMODULEINFO GetModuleInformation(HANDLE hProcess, HMODULE hModule) throws Exception{
|
||||
LPMODULEINFO lpmodinfo = new LPMODULEINFO();
|
||||
|
||||
boolean success = psapi.GetModuleInformation(hProcess, hModule, lpmodinfo, lpmodinfo.size());
|
||||
if (!success){
|
||||
int err=k32.GetLastError();
|
||||
throw new Exception("GetModuleInformation failed. Error: "+err);
|
||||
}
|
||||
return lpmodinfo;
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user